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:
parent
5036031520
commit
77a28b731d
@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
@ -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 };
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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':
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user