Handlify callers to GetElementNoException.

R=ishell@chromium.org

Review URL: https://codereview.chromium.org/204693002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20117 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
yangguo@chromium.org 2014-03-20 12:22:13 +00:00
parent 5036031520
commit 77a28b731d
9 changed files with 74 additions and 68 deletions

View File

@ -2203,9 +2203,10 @@ Local<StackFrame> StackTrace::GetFrame(uint32_t index) const {
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));
}

View File

@ -819,10 +819,10 @@ Handle<JSFunction> Execution::InstantiateFunction(
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 };

View File

@ -1132,8 +1132,7 @@ Handle<String> Factory::EmergencyNewError(const char* message,
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);

View File

@ -669,13 +669,13 @@ class JSArrayBasedStruct {
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 @@ class FunctionInfoWrapper : public JSArrayBasedStruct<FunctionInfoWrapper> {
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 @@ class SharedInfoWrapper : public JSArrayBasedStruct<SharedInfoWrapper> {
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 @@ class SharedInfoWrapper : public JSArrayBasedStruct<SharedInfoWrapper> {
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 @@ class FunctionInfoListener {
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 @@ class FunctionInfoListener {
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 @@ class FunctionInfoListener {
}
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 @@ void LiveEdit::WrapSharedFunctionInfos(Handle<JSArray> array) {
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 @@ static int TranslatePosition(int original_position,
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 @@ static Handle<Code> PatchPositionsInCode(
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 @@ static bool CheckActivation(Handle<JSArray> shared_info_array,
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 @@ static const char* DropActivationsInActiveThread(
// 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);

View File

@ -1206,9 +1206,9 @@ void Logger::LogRuntime(Vector<const char> format,
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':

View File

@ -1077,11 +1077,20 @@ Handle<Object> Object::GetElement(Isolate* isolate,
}
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;
}

View File

@ -5179,8 +5179,7 @@ Handle<Object> JSObject::DeleteElement(Handle<JSObject> object,
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 @@ void JSObject::DefineAccessor(Handle<JSObject> object,
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 @@ static bool GetOldValue(Isolate* isolate,
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 @@ Handle<Object> JSObject::SetElement(Handle<JSObject> object,
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 @@ Handle<Object> JSObject::SetElement(Handle<JSObject> object,
} 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();

View File

@ -1586,7 +1586,10 @@ class Object : public MaybeObject {
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);

View File

@ -21982,8 +21982,9 @@ THREADED_TEST(FunctionNew) {
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);