Index: src/api.cc |
=================================================================== |
--- src/api.cc (revision 9531) |
+++ src/api.cc (working copy) |
@@ -185,7 +185,10 @@ |
int end_marker; |
heap_stats.end_marker = &end_marker; |
i::Isolate* isolate = i::Isolate::Current(); |
- isolate->heap()->RecordStats(&heap_stats, take_snapshot); |
+ // BUG(1718): |
+ // Don't use the take_snapshot since we don't support HeapIterator here |
+ // without doing a special GC. |
+ isolate->heap()->RecordStats(&heap_stats, false); |
i::V8::SetFatalError(); |
FatalErrorCallback callback = GetFatalErrorHandler(); |
{ |
@@ -501,9 +504,12 @@ |
Extension::Extension(const char* name, |
const char* source, |
int dep_count, |
- const char** deps) |
+ const char** deps, |
+ int source_length) |
: name_(name), |
- source_(source), |
+ source_length_(source_length >= 0 ? |
+ source_length : (source ? strlen(source) : 0)), |
+ source_(source, source_length_), |
dep_count_(dep_count), |
deps_(deps), |
auto_enable_(false) { } |
@@ -3204,21 +3210,10 @@ |
ENTER_V8(isolate); |
i::HandleScope scope(isolate); |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
- i::Handle<i::Object> hidden_props(i::GetHiddenProperties( |
- self, |
- i::JSObject::ALLOW_CREATION)); |
- i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); |
+ i::Handle<i::String> key_obj = Utils::OpenHandle(*key); |
i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); |
- EXCEPTION_PREAMBLE(isolate); |
- i::Handle<i::Object> obj = i::SetProperty( |
- hidden_props, |
- key_obj, |
- value_obj, |
- static_cast<PropertyAttributes>(None), |
- i::kNonStrictMode); |
- has_pending_exception = obj.is_null(); |
- EXCEPTION_BAILOUT_CHECK(isolate, false); |
- return true; |
+ i::Handle<i::Object> result = i::SetHiddenProperty(self, key_obj, value_obj); |
+ return *result == *self; |
} |
@@ -3228,20 +3223,9 @@ |
return Local<v8::Value>()); |
ENTER_V8(isolate); |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
- i::Handle<i::Object> hidden_props(i::GetHiddenProperties( |
- self, |
- i::JSObject::OMIT_CREATION)); |
- if (hidden_props->IsUndefined()) { |
- return v8::Local<v8::Value>(); |
- } |
i::Handle<i::String> key_obj = Utils::OpenHandle(*key); |
- EXCEPTION_PREAMBLE(isolate); |
- i::Handle<i::Object> result = i::GetProperty(hidden_props, key_obj); |
- has_pending_exception = result.is_null(); |
- EXCEPTION_BAILOUT_CHECK(isolate, v8::Local<v8::Value>()); |
- if (result->IsUndefined()) { |
- return v8::Local<v8::Value>(); |
- } |
+ i::Handle<i::Object> result(self->GetHiddenProperty(*key_obj)); |
+ if (result->IsUndefined()) return v8::Local<v8::Value>(); |
return Utils::ToLocal(result); |
} |
@@ -3252,15 +3236,9 @@ |
ENTER_V8(isolate); |
i::HandleScope scope(isolate); |
i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
- i::Handle<i::Object> hidden_props(i::GetHiddenProperties( |
- self, |
- i::JSObject::OMIT_CREATION)); |
- if (hidden_props->IsUndefined()) { |
- return true; |
- } |
- i::Handle<i::JSObject> js_obj(i::JSObject::cast(*hidden_props)); |
i::Handle<i::String> key_obj = Utils::OpenHandle(*key); |
- return i::DeleteProperty(js_obj, key_obj)->IsTrue(); |
+ self->DeleteHiddenProperty(*key_obj); |
+ return true; |
} |
@@ -3310,22 +3288,12 @@ |
i::Handle<i::ExternalArray> array = |
isolate->factory()->NewExternalArray(length, array_type, data); |
- // If the object already has external elements, create a new, unique |
- // map if the element type is now changing, because assumptions about |
- // generated code based on the receiver's map will be invalid. |
- i::Handle<i::HeapObject> elements(object->elements()); |
- bool cant_reuse_map = |
- elements->map()->IsUndefined() || |
- !elements->map()->has_external_array_elements() || |
- elements->map() != isolate->heap()->MapForExternalArrayType(array_type); |
- if (cant_reuse_map) { |
- i::Handle<i::Map> external_array_map = |
- isolate->factory()->GetElementsTransitionMap( |
- i::Handle<i::Map>(object->map()), |
- GetElementsKindFromExternalArrayType(array_type), |
- object->HasFastProperties()); |
- object->set_map(*external_array_map); |
- } |
+ i::Handle<i::Map> external_array_map = |
+ isolate->factory()->GetElementsTransitionMap( |
+ object, |
+ GetElementsKindFromExternalArrayType(array_type)); |
+ |
+ object->set_map(*external_array_map); |
object->set_elements(*array); |
} |
@@ -3799,10 +3767,11 @@ |
void v8::String::VerifyExternalStringResource( |
v8::String::ExternalStringResource* value) const { |
i::Handle<i::String> str = Utils::OpenHandle(this); |
- v8::String::ExternalStringResource* expected; |
+ const v8::String::ExternalStringResource* expected; |
if (i::StringShape(*str).IsExternalTwoByte()) { |
- void* resource = i::Handle<i::ExternalTwoByteString>::cast(str)->resource(); |
- expected = reinterpret_cast<ExternalStringResource*>(resource); |
+ const void* resource = |
+ i::Handle<i::ExternalTwoByteString>::cast(str)->resource(); |
+ expected = reinterpret_cast<const ExternalStringResource*>(resource); |
} else { |
expected = NULL; |
} |
@@ -3810,7 +3779,7 @@ |
} |
-v8::String::ExternalAsciiStringResource* |
+const v8::String::ExternalAsciiStringResource* |
v8::String::GetExternalAsciiStringResource() const { |
i::Handle<i::String> str = Utils::OpenHandle(this); |
if (IsDeadCheck(str->GetIsolate(), |
@@ -3818,8 +3787,9 @@ |
return NULL; |
} |
if (i::StringShape(*str).IsExternalAscii()) { |
- void* resource = i::Handle<i::ExternalAsciiString>::cast(str)->resource(); |
- return reinterpret_cast<ExternalAsciiStringResource*>(resource); |
+ const void* resource = |
+ i::Handle<i::ExternalAsciiString>::cast(str)->resource(); |
+ return reinterpret_cast<const ExternalAsciiStringResource*>(resource); |
} else { |
return NULL; |
} |
@@ -4009,7 +3979,7 @@ |
void v8::V8::LowMemoryNotification() { |
i::Isolate* isolate = i::Isolate::Current(); |
if (!isolate->IsInitialized()) return; |
- isolate->heap()->CollectAllGarbage(true); |
+ isolate->heap()->CollectAllAvailableGarbage(); |
} |
@@ -5480,6 +5450,12 @@ |
wait_for_connection); |
} |
+ |
+void Debug::DisableAgent() { |
+ return i::Isolate::Current()->debugger()->StopAgent(); |
+} |
+ |
+ |
void Debug::ProcessDebugMessages() { |
i::Execution::ProcessDebugMesssages(true); |
} |
@@ -5804,6 +5780,16 @@ |
} |
+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())); |
+} |
+ |
+ |
static i::HeapSnapshot* ToInternal(const HeapSnapshot* snapshot) { |
return const_cast<i::HeapSnapshot*>( |
reinterpret_cast<const i::HeapSnapshot*>(snapshot)); |