Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(377)

Unified Diff: src/elements.cc

Issue 231103002: Object::GetElements() and friends maybehandlification. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: FixedArray::UnionOfKeys() maybehandlified Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/elements.h ('k') | src/handles.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/elements.cc
diff --git a/src/elements.cc b/src/elements.cc
index a7d48b4cf432411f90a709b350bf1b805a62ceac..bbcf50f54585b257442e76a68cd7def33f1fd61f 100644
--- a/src/elements.cc
+++ b/src/elements.cc
@@ -635,8 +635,7 @@ class ElementsAccessorBase : public ElementsAccessor {
receiver, holder, key, backing_store);
}
- // TODO(ishell): Temporary wrapper until handlified.
- MUST_USE_RESULT virtual Handle<Object> Get(
+ MUST_USE_RESULT virtual MaybeHandle<Object> Get(
Handle<Object> receiver,
Handle<JSObject> holder,
uint32_t key,
@@ -655,10 +654,11 @@ class ElementsAccessorBase : public ElementsAccessor {
receiver, holder, key, backing_store);
}
- static Handle<Object> GetImpl(Handle<Object> receiver,
- Handle<JSObject> obj,
- uint32_t key,
- Handle<FixedArrayBase> backing_store) {
+ MUST_USE_RESULT static MaybeHandle<Object> GetImpl(
+ Handle<Object> receiver,
+ Handle<JSObject> obj,
+ uint32_t key,
+ Handle<FixedArrayBase> backing_store) {
if (key < ElementsAccessorSubclass::GetCapacityImpl(backing_store)) {
return BackingStore::get(Handle<BackingStore>::cast(backing_store), key);
} else {
@@ -804,7 +804,7 @@ class ElementsAccessorBase : public ElementsAccessor {
from, from_start, to, from_kind, to_start, packed_size, copy_size);
}
- virtual Handle<FixedArray> AddElementsToFixedArray(
+ virtual MaybeHandle<FixedArray> AddElementsToFixedArray(
Handle<Object> receiver,
Handle<JSObject> holder,
Handle<FixedArray> to,
@@ -823,14 +823,19 @@ class ElementsAccessorBase : public ElementsAccessor {
uint32_t len1 = ElementsAccessorSubclass::GetCapacityImpl(from);
if (len1 == 0) return to;
+ Isolate* isolate = from->GetIsolate();
+
// Compute how many elements are not in other.
uint32_t extra = 0;
for (uint32_t y = 0; y < len1; y++) {
uint32_t key = ElementsAccessorSubclass::GetKeyForIndexImpl(from, y);
if (ElementsAccessorSubclass::HasElementImpl(
receiver, holder, key, from)) {
- Handle<Object> value =
- ElementsAccessorSubclass::GetImpl(receiver, holder, key, from);
+ Handle<Object> value;
+ ASSIGN_RETURN_ON_EXCEPTION(
+ isolate, value,
+ ElementsAccessorSubclass::GetImpl(receiver, holder, key, from),
+ FixedArray);
ASSERT(!value->IsTheHole());
if (!HasKey(to, value)) {
@@ -842,7 +847,6 @@ class ElementsAccessorBase : public ElementsAccessor {
if (extra == 0) return to;
// Allocate the result
- Isolate* isolate = from->GetIsolate();
Handle<FixedArray> result = isolate->factory()->NewFixedArray(len0 + extra);
// Fill in the content
@@ -862,8 +866,11 @@ class ElementsAccessorBase : public ElementsAccessor {
ElementsAccessorSubclass::GetKeyForIndexImpl(from, y);
if (ElementsAccessorSubclass::HasElementImpl(
receiver, holder, key, from)) {
- Handle<Object> value =
- ElementsAccessorSubclass::GetImpl(receiver, holder, key, from);
+ Handle<Object> value;
+ ASSIGN_RETURN_ON_EXCEPTION(
+ isolate, value,
+ ElementsAccessorSubclass::GetImpl(receiver, holder, key, from),
+ FixedArray);
if (!value->IsTheHole() && !HasKey(to, value)) {
result->set(len0 + index, *value);
index++;
@@ -1333,10 +1340,11 @@ class TypedElementsAccessor
friend class ElementsAccessorBase<AccessorClass,
ElementsKindTraits<Kind> >;
- static Handle<Object> GetImpl(Handle<Object> receiver,
- Handle<JSObject> obj,
- uint32_t key,
- Handle<FixedArrayBase> backing_store) {
+ MUST_USE_RESULT static MaybeHandle<Object> GetImpl(
+ Handle<Object> receiver,
+ Handle<JSObject> obj,
+ uint32_t key,
+ Handle<FixedArrayBase> backing_store) {
if (key < AccessorClass::GetCapacityImpl(backing_store)) {
return BackingStore::get(Handle<BackingStore>::cast(backing_store), key);
} else {
@@ -1540,7 +1548,7 @@ class DictionaryElementsAccessor
return DeleteCommon(obj, key, mode);
}
- static Handle<Object> GetImpl(
+ MUST_USE_RESULT static MaybeHandle<Object> GetImpl(
Handle<Object> receiver,
Handle<JSObject> obj,
uint32_t key,
@@ -1639,7 +1647,7 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
SloppyArgumentsElementsAccessor,
ElementsKindTraits<SLOPPY_ARGUMENTS_ELEMENTS> >;
- MUST_USE_RESULT static Handle<Object> GetImpl(
+ MUST_USE_RESULT static MaybeHandle<Object> GetImpl(
Handle<Object> receiver,
Handle<JSObject> obj,
uint32_t key,
@@ -1657,8 +1665,12 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
// Object is not mapped, defer to the arguments.
Handle<FixedArray> arguments(FixedArray::cast(parameter_map->get(1)),
isolate);
- Handle<Object> result = ElementsAccessor::ForArray(arguments)->Get(
- receiver, obj, key, arguments);
+ Handle<Object> result;
+ ASSIGN_RETURN_ON_EXCEPTION(
+ isolate, result,
+ ElementsAccessor::ForArray(arguments)->Get(
+ receiver, obj, key, arguments),
+ Object);
// Elements of the arguments object in slow mode might be slow aliases.
if (result->IsAliasedArgumentsEntry()) {
DisallowHeapAllocation no_gc;
@@ -1792,10 +1804,16 @@ class SloppyArgumentsElementsAccessor : public ElementsAccessorBase<
if (!probe->IsTheHole()) {
return true;
} else {
+ Isolate* isolate = holder->GetIsolate();
Handle<FixedArrayBase> arguments(FixedArrayBase::cast(
- Handle<FixedArray>::cast(parameter_map)->get(1)));
+ Handle<FixedArray>::cast(parameter_map)->get(1)), isolate);
ElementsAccessor* accessor = ElementsAccessor::ForArray(arguments);
- return !accessor->Get(receiver, holder, key, arguments)->IsTheHole();
+ Handle<Object> value;
+ ASSIGN_RETURN_ON_EXCEPTION_VALUE(
+ isolate, value,
+ accessor->Get(receiver, holder, key, arguments),
+ false);
+ return !value->IsTheHole();
}
}
« no previous file with comments | « src/elements.h ('k') | src/handles.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698