Revision: 20117
Author: [email protected]
Date: Thu Mar 20 12:22:13 2014 UTC
Log: Handlify callers to GetElementNoException.
[email protected]
Review URL: https://codereview.chromium.org/204693002
http://code.google.com/p/v8/source/detail?r=20117
Modified:
/branches/bleeding_edge/src/api.cc
/branches/bleeding_edge/src/execution.cc
/branches/bleeding_edge/src/factory.cc
/branches/bleeding_edge/src/liveedit.cc
/branches/bleeding_edge/src/log.cc
/branches/bleeding_edge/src/objects-inl.h
/branches/bleeding_edge/src/objects.cc
/branches/bleeding_edge/src/objects.h
/branches/bleeding_edge/test/cctest/test-api.cc
=======================================
--- /branches/bleeding_edge/src/api.cc Thu Mar 20 11:11:28 2014 UTC
+++ /branches/bleeding_edge/src/api.cc Thu Mar 20 12:22:13 2014 UTC
@@ -2203,9 +2203,10 @@
ENTER_V8(isolate);
EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate));
i::Handle<i::JSArray> self = Utils::OpenHandle(this);
- i::Object* raw_object = self->GetElementNoExceptionThrown(isolate,
index);
- i::Handle<i::JSObject> obj(i::JSObject::cast(raw_object));
- return scope.Escape(Utils::StackFrameToLocal(obj));
+ i::Handle<i::Object> obj =
+ i::Object::GetElementNoExceptionThrown(isolate, self, index);
+ i::Handle<i::JSObject> jsobj = i::Handle<i::JSObject>::cast(obj);
+ return scope.Escape(Utils::StackFrameToLocal(jsobj));
}
=======================================
--- /branches/bleeding_edge/src/execution.cc Wed Mar 19 13:06:53 2014 UTC
+++ /branches/bleeding_edge/src/execution.cc Thu Mar 20 12:22:13 2014 UTC
@@ -819,10 +819,10 @@
if (!data->do_not_cache()) {
// Fast case: see if the function has already been instantiated
int serial_number = Smi::cast(data->serial_number())->value();
- Object* elm =
- isolate->native_context()->function_cache()->
- GetElementNoExceptionThrown(isolate, serial_number);
- if (elm->IsJSFunction()) return
Handle<JSFunction>(JSFunction::cast(elm));
+ Handle<JSObject> cache(isolate->native_context()->function_cache());
+ Handle<Object> elm =
+ Object::GetElementNoExceptionThrown(isolate, cache, serial_number);
+ if (elm->IsJSFunction()) return Handle<JSFunction>::cast(elm);
}
// The function has not yet been instantiated in this context; do it.
Handle<Object> args[] = { data };
=======================================
--- /branches/bleeding_edge/src/factory.cc Thu Mar 20 11:11:28 2014 UTC
+++ /branches/bleeding_edge/src/factory.cc Thu Mar 20 12:22:13 2014 UTC
@@ -1132,8 +1132,7 @@
space--;
if (space > 0) {
Handle<String> arg_str = Handle<String>::cast(
- Object::GetElement(isolate(), args, i));
- CHECK_NOT_EMPTY_HANDLE(isolate(), arg_str);
+ Object::GetElementNoExceptionThrown(isolate(), args, i));
SmartArrayPointer<char> arg = arg_str->ToCString();
Vector<char> v2(p, static_cast<int>(space));
OS::StrNCpy(v2, arg.get(), space);
=======================================
--- /branches/bleeding_edge/src/liveedit.cc Tue Mar 18 12:34:02 2014 UTC
+++ /branches/bleeding_edge/src/liveedit.cc Thu Mar 20 12:22:13 2014 UTC
@@ -669,13 +669,13 @@
field_position,
Handle<Smi>(Smi::FromInt(value), isolate()));
}
- Object* GetField(int field_position) {
- return array_->GetElementNoExceptionThrown(isolate(), field_position);
+ Handle<Object> GetField(int field_position) {
+ return Object::GetElementNoExceptionThrown(
+ isolate(), array_, field_position);
}
int GetSmiValueField(int field_position) {
- Object* res = GetField(field_position);
- CHECK(res->IsSmi());
- return Smi::cast(res)->value();
+ Handle<Object> res = GetField(field_position);
+ return Handle<Smi>::cast(res)->value();
}
private:
@@ -724,17 +724,15 @@
return this->GetSmiValueField(kParentIndexOffset_);
}
Handle<Code> GetFunctionCode() {
- Object* element = this->GetField(kCodeOffset_);
- CHECK(element->IsJSValue());
- Handle<JSValue> value_wrapper(JSValue::cast(element));
+ Handle<Object> element = this->GetField(kCodeOffset_);
+ Handle<JSValue> value_wrapper = Handle<JSValue>::cast(element);
Handle<Object> raw_result = UnwrapJSValue(value_wrapper);
CHECK(raw_result->IsCode());
return Handle<Code>::cast(raw_result);
}
Handle<Object> GetCodeScopeInfo() {
- Object* element = this->GetField(kCodeScopeInfoOffset_);
- CHECK(element->IsJSValue());
- return UnwrapJSValue(Handle<JSValue>(JSValue::cast(element)));
+ Handle<Object> element = this->GetField(kCodeScopeInfoOffset_);
+ return UnwrapJSValue(Handle<JSValue>::cast(element));
}
int GetStartPosition() {
return this->GetSmiValueField(kStartPositionOffset_);
@@ -767,8 +765,8 @@
public:
static bool IsInstance(Handle<JSArray> array) {
return array->length() == Smi::FromInt(kSize_) &&
- array->GetElementNoExceptionThrown(
- array->GetIsolate(), kSharedInfoOffset_)->IsJSValue();
+ Object::GetElementNoExceptionThrown(
+ array->GetIsolate(), array, kSharedInfoOffset_)->IsJSValue();
}
explicit SharedInfoWrapper(Handle<JSArray> array)
@@ -785,9 +783,8 @@
this->SetSmiValueField(kEndPositionOffset_, end_position);
}
Handle<SharedFunctionInfo> GetInfo() {
- Object* element = this->GetField(kSharedInfoOffset_);
- CHECK(element->IsJSValue());
- Handle<JSValue> value_wrapper(JSValue::cast(element));
+ Handle<Object> element = this->GetField(kSharedInfoOffset_);
+ Handle<JSValue> value_wrapper = Handle<JSValue>::cast(element);
return UnwrapSharedFunctionInfoFromJSValue(value_wrapper);
}
@@ -826,8 +823,8 @@
HandleScope scope(isolate());
FunctionInfoWrapper info =
FunctionInfoWrapper::cast(
- result_->GetElementNoExceptionThrown(
- isolate(), current_parent_index_));
+ *Object::GetElementNoExceptionThrown(
+ isolate(), result_, current_parent_index_));
current_parent_index_ = info.GetParentIndex();
}
@@ -836,8 +833,8 @@
void FunctionCode(Handle<Code> function_code) {
FunctionInfoWrapper info =
FunctionInfoWrapper::cast(
- result_->GetElementNoExceptionThrown(
- isolate(), current_parent_index_));
+ *Object::GetElementNoExceptionThrown(
+ isolate(), result_, current_parent_index_));
info.SetFunctionCode(function_code,
Handle<HeapObject>(isolate()->heap()->null_value()));
}
@@ -851,8 +848,8 @@
}
FunctionInfoWrapper info =
FunctionInfoWrapper::cast(
- result_->GetElementNoExceptionThrown(
- isolate(), current_parent_index_));
+ *Object::GetElementNoExceptionThrown(
+ isolate(), result_, current_parent_index_));
info.SetFunctionCode(Handle<Code>(shared->code()),
Handle<HeapObject>(shared->scope_info()));
info.SetSharedFunctionInfo(shared);
@@ -987,7 +984,7 @@
for (int i = 0; i < len; i++) {
Handle<SharedFunctionInfo> info(
SharedFunctionInfo::cast(
- array->GetElementNoExceptionThrown(isolate, i)));
+ *Object::GetElementNoExceptionThrown(isolate, array, i)));
SharedInfoWrapper info_wrapper = SharedInfoWrapper::Create(isolate);
Handle<String> name_handle(String::cast(info->name()));
info_wrapper.SetProperties(name_handle, info->start_position(),
@@ -1361,23 +1358,24 @@
Isolate* isolate = position_change_array->GetIsolate();
// TODO(635): binary search may be used here
for (int i = 0; i < array_len; i += 3) {
- Object* element =
- position_change_array->GetElementNoExceptionThrown(isolate, i);
+ HandleScope scope(isolate);
+ Handle<Object> element = Object::GetElementNoExceptionThrown(
+ isolate, position_change_array, i);
CHECK(element->IsSmi());
- int chunk_start = Smi::cast(element)->value();
+ int chunk_start = Handle<Smi>::cast(element)->value();
if (original_position < chunk_start) {
break;
}
- element = position_change_array->GetElementNoExceptionThrown(isolate,
- i + 1);
+ element = Object::GetElementNoExceptionThrown(
+ isolate, position_change_array, i + 1);
CHECK(element->IsSmi());
- int chunk_end = Smi::cast(element)->value();
+ int chunk_end = Handle<Smi>::cast(element)->value();
// Position mustn't be inside a chunk.
ASSERT(original_position >= chunk_end);
- element = position_change_array->GetElementNoExceptionThrown(isolate,
- i + 2);
+ element = Object::GetElementNoExceptionThrown(
+ isolate, position_change_array, i + 2);
CHECK(element->IsSmi());
- int chunk_changed_end = Smi::cast(element)->value();
+ int chunk_changed_end = Handle<Smi>::cast(element)->value();
position_diff = chunk_changed_end - chunk_end;
}
@@ -1472,7 +1470,6 @@
code->instruction_start());
{
- DisallowHeapAllocation no_allocation;
for (RelocIterator it(*code); !it.done(); it.next()) {
RelocInfo* rinfo = it.rinfo();
if (RelocInfo::IsPosition(rinfo->rmode())) {
@@ -1631,10 +1628,10 @@
Isolate* isolate = shared_info_array->GetIsolate();
int len = GetArrayLength(shared_info_array);
for (int i = 0; i < len; i++) {
- Object* element =
- shared_info_array->GetElementNoExceptionThrown(isolate, i);
- CHECK(element->IsJSValue());
- Handle<JSValue> jsvalue(JSValue::cast(element));
+ HandleScope scope(isolate);
+ Handle<Object> element =
+ Object::GetElementNoExceptionThrown(isolate, shared_info_array, i);
+ Handle<JSValue> jsvalue = Handle<JSValue>::cast(element);
Handle<SharedFunctionInfo> shared =
UnwrapSharedFunctionInfoFromJSValue(jsvalue);
@@ -1949,8 +1946,8 @@
// Replace "blocked on active" with "replaced on active" status.
for (int i = 0; i < array_len; i++) {
- Handle<Object> obj = Object::GetElement(isolate, result, i);
- CHECK_NOT_EMPTY_HANDLE(isolate, obj);
+ Handle<Object> obj =
+ Object::GetElementNoExceptionThrown(isolate, result, i);
if (*obj == Smi::FromInt(LiveEdit::FUNCTION_BLOCKED_ON_ACTIVE_STACK)) {
Handle<Object> replaced(
Smi::FromInt(LiveEdit::FUNCTION_REPLACED_ON_ACTIVE_STACK),
isolate);
=======================================
--- /branches/bleeding_edge/src/log.cc Tue Mar 18 12:34:02 2014 UTC
+++ /branches/bleeding_edge/src/log.cc Thu Mar 20 12:22:13 2014 UTC
@@ -1206,9 +1206,9 @@
if (c == '%' && i <= format.length() - 2) {
i++;
ASSERT('0' <= format[i] && format[i] <= '9');
- Handle<Object> obj = Object::GetElement(isolate_, args, format[i]
- '0');
// No exception expected when getting an element from an array
literal.
- CHECK_NOT_EMPTY_HANDLE(isolate_, obj);
+ Handle<Object> obj =
+ Object::GetElementNoExceptionThrown(isolate_, args, format[i]
- '0');
i++;
switch (format[i]) {
case 's':
=======================================
--- /branches/bleeding_edge/src/objects-inl.h Wed Mar 19 16:29:19 2014 UTC
+++ /branches/bleeding_edge/src/objects-inl.h Thu Mar 20 12:22:13 2014 UTC
@@ -1077,11 +1077,20 @@
}
-Object* Object::GetElementNoExceptionThrown(Isolate* isolate, uint32_t
index) {
- MaybeObject* maybe = GetElementWithReceiver(isolate, this, index);
- ASSERT(!maybe->IsFailure());
- Object* result = NULL; // Initialization to please compiler.
- maybe->ToObject(&result);
+static Handle<Object> GetElementNoExceptionThrownHelper(Isolate* isolate,
+ Handle<Object>
object,
+ uint32_t index) {
+ CALL_HEAP_FUNCTION(isolate,
+ object->GetElementWithReceiver(isolate, *object,
index),
+ Object);
+}
+
+Handle<Object> Object::GetElementNoExceptionThrown(Isolate* isolate,
+ Handle<Object> object,
+ uint32_t index) {
+ Handle<Object> result =
+ GetElementNoExceptionThrownHelper(isolate, object, index);
+ CHECK_NOT_EMPTY_HANDLE(isolate, result);
return result;
}
=======================================
--- /branches/bleeding_edge/src/objects.cc Thu Mar 20 10:52:22 2014 UTC
+++ /branches/bleeding_edge/src/objects.cc Thu Mar 20 12:22:13 2014 UTC
@@ -5179,8 +5179,7 @@
if (object->GetLocalElementAccessorPair(index) != NULL) {
old_value = Handle<Object>::cast(factory->the_hole_value());
} else {
- old_value = Object::GetElement(isolate, object, index);
- CHECK_NOT_EMPTY_HANDLE(isolate, old_value);
+ old_value = Object::GetElementNoExceptionThrown(isolate, object,
index);
}
}
}
@@ -6349,8 +6348,7 @@
if (is_element) {
preexists = HasLocalElement(object, index);
if (preexists && object->GetLocalElementAccessorPair(index) == NULL)
{
- old_value = Object::GetElement(isolate, object, index);
- CHECK_NOT_EMPTY_HANDLE(isolate, old_value);
+ old_value = Object::GetElementNoExceptionThrown(isolate, object,
index);
}
} else {
LookupResult lookup(isolate);
@@ -11332,8 +11330,7 @@
if (object->GetLocalElementAccessorPair(index) != NULL) {
value = Handle<Object>::cast(isolate->factory()->the_hole_value());
} else {
- value = Object::GetElement(isolate, object, index);
- CHECK_NOT_EMPTY_HANDLE(isolate, value);
+ value = Object::GetElementNoExceptionThrown(isolate, object, index);
}
old_values->Add(value);
indices->Add(index);
@@ -12553,8 +12550,7 @@
if (old_attributes != ABSENT) {
if (object->GetLocalElementAccessorPair(index) == NULL) {
- old_value = Object::GetElement(isolate, object, index);
- CHECK_NOT_EMPTY_HANDLE(isolate, old_value);
+ old_value = Object::GetElementNoExceptionThrown(isolate, object,
index);
}
} else if (object->IsJSArray()) {
// Store old array length in case adding an element grows the array.
@@ -12600,8 +12596,8 @@
} else if (old_value->IsTheHole()) {
EnqueueChangeRecord(object, "reconfigure", name, old_value);
} else {
- Handle<Object> new_value = Object::GetElement(isolate, object, index);
- CHECK_NOT_EMPTY_HANDLE(isolate, new_value);
+ Handle<Object> new_value =
+ Object::GetElementNoExceptionThrown(isolate, object, index);
bool value_changed = !old_value->SameValue(*new_value);
if (old_attributes != new_attributes) {
if (!value_changed) old_value = isolate->factory()->the_hole_value();
=======================================
--- /branches/bleeding_edge/src/objects.h Thu Mar 20 08:33:06 2014 UTC
+++ /branches/bleeding_edge/src/objects.h Thu Mar 20 12:22:13 2014 UTC
@@ -1586,7 +1586,10 @@
uint32_t index);
// For use when we know that no exception can be thrown.
- inline Object* GetElementNoExceptionThrown(Isolate* isolate, uint32_t
index);
+ static inline Handle<Object> GetElementNoExceptionThrown(
+ Isolate* isolate,
+ Handle<Object> object,
+ uint32_t index);
MUST_USE_RESULT MaybeObject* GetElementWithReceiver(Isolate* isolate,
Object* receiver,
uint32_t index);
=======================================
--- /branches/bleeding_edge/test/cctest/test-api.cc Wed Mar 19 15:35:02
2014 UTC
+++ /branches/bleeding_edge/test/cctest/test-api.cc Thu Mar 20 12:22:13
2014 UTC
@@ -21982,8 +21982,9 @@
i::Smi::cast(v8::Utils::OpenHandle(*func)
->shared()->get_api_func_data()->serial_number())->value();
i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
- i::Object* elm = i_isolate->native_context()->function_cache()
- ->GetElementNoExceptionThrown(i_isolate, serial_number);
+ i::Handle<i::JSObject>
cache(i_isolate->native_context()->function_cache());
+ i::Handle<i::Object> elm =
+ i::Object::GetElementNoExceptionThrown(i_isolate, cache,
serial_number);
CHECK(elm->IsUndefined());
// Verify that each Function::New creates a new function instance
Local<Object> data2 = v8::Object::New(isolate);
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.