From 373bdbc9515756fee4db322d2579060f7c5041a6 Mon Sep 17 00:00:00 2001 From: "yangguo@chromium.org" Date: Thu, 18 Apr 2013 12:46:38 +0000 Subject: [PATCH] Fix debug print and wrong handle dereference in es6 typed array. R=dslomov@chromium.org BUG= Review URL: https://chromiumcodereview.appspot.com/14149009 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14330 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/api.cc | 3 +++ src/objects-printer.cc | 2 ++ src/runtime.cc | 8 +++----- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/api.cc b/src/api.cc index dddcd7d..15831ec 100644 --- a/src/api.cc +++ b/src/api.cc @@ -623,6 +623,9 @@ i::Object** V8::GlobalizeReference(i::Isolate* isolate, i::Object** obj) { if (IsDeadCheck(isolate, "V8::Persistent::New")) return NULL; LOG_API(isolate, "Persistent::New"); i::Handle result = isolate->global_handles()->Create(*obj); +#ifdef DEBUG + (*obj)->Verify(); +#endif // DEBUG return result.location(); } diff --git a/src/objects-printer.cc b/src/objects-printer.cc index aa71a96..f21481a 100644 --- a/src/objects-printer.cc +++ b/src/objects-printer.cc @@ -187,8 +187,10 @@ void HeapObject::HeapObjectPrint(FILE* out) { break; case JS_ARRAY_BUFFER_TYPE: JSArrayBuffer::cast(this)->JSArrayBufferPrint(out); + break; case JS_TYPED_ARRAY_TYPE: JSTypedArray::cast(this)->JSTypedArrayPrint(out); + break; #define MAKE_STRUCT_CASE(NAME, Name, name) \ case NAME##_TYPE: \ Name::cast(this)->Name##Print(out); \ diff --git a/src/runtime.cc b/src/runtime.cc index 2a34b84..c0213d2 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -706,9 +706,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ArrayBufferInitialize) { holder->set_byte_length(byte_length); v8::Isolate* external_isolate = reinterpret_cast(isolate); - v8::Handle external_holder(*holder); - Persistent weak_handle = Persistent::New( - external_isolate, external_holder); + v8::Persistent weak_handle = v8::Persistent::New( + external_isolate, v8::Utils::ToLocal(Handle::cast(holder))); weak_handle.MakeWeak(external_isolate, data, ArrayBufferWeakCallback); weak_handle.MarkIndependent(external_isolate); isolate->heap()->AdjustAmountOfExternalAllocatedMemory(allocated_length); @@ -734,8 +733,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ArrayBufferSliceImpl) { size_t start = static_cast(first); size_t target_length = NumberToSize(isolate, target->byte_length()); - if (target_length == 0) - return isolate->heap()->undefined_value(); + if (target_length == 0) return isolate->heap()->undefined_value(); ASSERT(NumberToSize(isolate, source->byte_length()) - target_length >= start); uint8_t* source_data = reinterpret_cast(source->backing_store()); -- 2.7.4