| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index 801b8f45c75a716d03291cfa8f5feef6a27f01a9..e926ef0054256a8d57f7ffe97d80018588a70fe0 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -35,6 +35,7 @@
|
| #ifndef V8_OBJECTS_INL_H_
|
| #define V8_OBJECTS_INL_H_
|
|
|
| +#include "elements.h"
|
| #include "objects.h"
|
| #include "contexts.h"
|
| #include "conversions-inl.h"
|
| @@ -502,6 +503,12 @@ bool Object::IsJSFunctionProxy() {
|
| }
|
|
|
|
|
| +bool Object::IsJSWeakMap() {
|
| + return Object::IsJSObject() &&
|
| + HeapObject::cast(this)->map()->instance_type() == JS_WEAK_MAP_TYPE;
|
| +}
|
| +
|
| +
|
| bool Object::IsJSContextExtensionObject() {
|
| return IsHeapObject()
|
| && (HeapObject::cast(this)->map()->instance_type() ==
|
| @@ -1308,6 +1315,8 @@ int JSObject::GetHeaderSize() {
|
| return JSValue::kSize;
|
| case JS_ARRAY_TYPE:
|
| return JSValue::kSize;
|
| + case JS_WEAK_MAP_TYPE:
|
| + return JSWeakMap::kSize;
|
| case JS_REGEXP_TYPE:
|
| return JSValue::kSize;
|
| case JS_CONTEXT_EXTENSION_OBJECT_TYPE:
|
| @@ -1495,6 +1504,7 @@ Object* FixedArray::get(int index) {
|
|
|
| void FixedArray::set(int index, Smi* value) {
|
| ASSERT(map() != HEAP->fixed_cow_array_map());
|
| + ASSERT(index >= 0 && index < this->length());
|
| ASSERT(reinterpret_cast<Object*>(value)->IsSmi());
|
| int offset = kHeaderSize + index * kPointerSize;
|
| WRITE_FIELD(this, offset, value);
|
| @@ -1527,7 +1537,7 @@ inline double FixedDoubleArray::canonical_not_the_hole_nan_as_double() {
|
| }
|
|
|
|
|
| -double FixedDoubleArray::get(int index) {
|
| +double FixedDoubleArray::get_scalar(int index) {
|
| ASSERT(map() != HEAP->fixed_cow_array_map() &&
|
| map() != HEAP->fixed_array_map());
|
| ASSERT(index >= 0 && index < this->length());
|
| @@ -1537,6 +1547,15 @@ double FixedDoubleArray::get(int index) {
|
| }
|
|
|
|
|
| +MaybeObject* FixedDoubleArray::get(int index) {
|
| + if (is_the_hole(index)) {
|
| + return GetHeap()->the_hole_value();
|
| + } else {
|
| + return GetHeap()->NumberFromDouble(get_scalar(index));
|
| + }
|
| +}
|
| +
|
| +
|
| void FixedDoubleArray::set(int index, double value) {
|
| ASSERT(map() != HEAP->fixed_cow_array_map() &&
|
| map() != HEAP->fixed_array_map());
|
| @@ -1962,6 +1981,7 @@ CAST_ACCESSOR(JSArray)
|
| CAST_ACCESSOR(JSRegExp)
|
| CAST_ACCESSOR(JSProxy)
|
| CAST_ACCESSOR(JSFunctionProxy)
|
| +CAST_ACCESSOR(JSWeakMap)
|
| CAST_ACCESSOR(Foreign)
|
| CAST_ACCESSOR(ByteArray)
|
| CAST_ACCESSOR(FreeSpace)
|
| @@ -2267,13 +2287,18 @@ uint8_t* ExternalPixelArray::external_pixel_pointer() {
|
| }
|
|
|
|
|
| -uint8_t ExternalPixelArray::get(int index) {
|
| +uint8_t ExternalPixelArray::get_scalar(int index) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| uint8_t* ptr = external_pixel_pointer();
|
| return ptr[index];
|
| }
|
|
|
|
|
| +MaybeObject* ExternalPixelArray::get(int index) {
|
| + return Smi::FromInt(static_cast<int>(get_scalar(index)));
|
| +}
|
| +
|
| +
|
| void ExternalPixelArray::set(int index, uint8_t value) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| uint8_t* ptr = external_pixel_pointer();
|
| @@ -2293,13 +2318,18 @@ void ExternalArray::set_external_pointer(void* value, WriteBarrierMode mode) {
|
| }
|
|
|
|
|
| -int8_t ExternalByteArray::get(int index) {
|
| +int8_t ExternalByteArray::get_scalar(int index) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| int8_t* ptr = static_cast<int8_t*>(external_pointer());
|
| return ptr[index];
|
| }
|
|
|
|
|
| +MaybeObject* ExternalByteArray::get(int index) {
|
| + return Smi::FromInt(static_cast<int>(get_scalar(index)));
|
| +}
|
| +
|
| +
|
| void ExternalByteArray::set(int index, int8_t value) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| int8_t* ptr = static_cast<int8_t*>(external_pointer());
|
| @@ -2307,13 +2337,18 @@ void ExternalByteArray::set(int index, int8_t value) {
|
| }
|
|
|
|
|
| -uint8_t ExternalUnsignedByteArray::get(int index) {
|
| +uint8_t ExternalUnsignedByteArray::get_scalar(int index) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| uint8_t* ptr = static_cast<uint8_t*>(external_pointer());
|
| return ptr[index];
|
| }
|
|
|
|
|
| +MaybeObject* ExternalUnsignedByteArray::get(int index) {
|
| + return Smi::FromInt(static_cast<int>(get_scalar(index)));
|
| +}
|
| +
|
| +
|
| void ExternalUnsignedByteArray::set(int index, uint8_t value) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| uint8_t* ptr = static_cast<uint8_t*>(external_pointer());
|
| @@ -2321,13 +2356,18 @@ void ExternalUnsignedByteArray::set(int index, uint8_t value) {
|
| }
|
|
|
|
|
| -int16_t ExternalShortArray::get(int index) {
|
| +int16_t ExternalShortArray::get_scalar(int index) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| int16_t* ptr = static_cast<int16_t*>(external_pointer());
|
| return ptr[index];
|
| }
|
|
|
|
|
| +MaybeObject* ExternalShortArray::get(int index) {
|
| + return Smi::FromInt(static_cast<int>(get_scalar(index)));
|
| +}
|
| +
|
| +
|
| void ExternalShortArray::set(int index, int16_t value) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| int16_t* ptr = static_cast<int16_t*>(external_pointer());
|
| @@ -2335,13 +2375,18 @@ void ExternalShortArray::set(int index, int16_t value) {
|
| }
|
|
|
|
|
| -uint16_t ExternalUnsignedShortArray::get(int index) {
|
| +uint16_t ExternalUnsignedShortArray::get_scalar(int index) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| uint16_t* ptr = static_cast<uint16_t*>(external_pointer());
|
| return ptr[index];
|
| }
|
|
|
|
|
| +MaybeObject* ExternalUnsignedShortArray::get(int index) {
|
| + return Smi::FromInt(static_cast<int>(get_scalar(index)));
|
| +}
|
| +
|
| +
|
| void ExternalUnsignedShortArray::set(int index, uint16_t value) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| uint16_t* ptr = static_cast<uint16_t*>(external_pointer());
|
| @@ -2349,13 +2394,18 @@ void ExternalUnsignedShortArray::set(int index, uint16_t value) {
|
| }
|
|
|
|
|
| -int32_t ExternalIntArray::get(int index) {
|
| +int32_t ExternalIntArray::get_scalar(int index) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| int32_t* ptr = static_cast<int32_t*>(external_pointer());
|
| return ptr[index];
|
| }
|
|
|
|
|
| +MaybeObject* ExternalIntArray::get(int index) {
|
| + return GetHeap()->NumberFromInt32(get_scalar(index));
|
| +}
|
| +
|
| +
|
| void ExternalIntArray::set(int index, int32_t value) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| int32_t* ptr = static_cast<int32_t*>(external_pointer());
|
| @@ -2363,13 +2413,18 @@ void ExternalIntArray::set(int index, int32_t value) {
|
| }
|
|
|
|
|
| -uint32_t ExternalUnsignedIntArray::get(int index) {
|
| +uint32_t ExternalUnsignedIntArray::get_scalar(int index) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| uint32_t* ptr = static_cast<uint32_t*>(external_pointer());
|
| return ptr[index];
|
| }
|
|
|
|
|
| +MaybeObject* ExternalUnsignedIntArray::get(int index) {
|
| + return GetHeap()->NumberFromUint32(get_scalar(index));
|
| +}
|
| +
|
| +
|
| void ExternalUnsignedIntArray::set(int index, uint32_t value) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| uint32_t* ptr = static_cast<uint32_t*>(external_pointer());
|
| @@ -2377,13 +2432,18 @@ void ExternalUnsignedIntArray::set(int index, uint32_t value) {
|
| }
|
|
|
|
|
| -float ExternalFloatArray::get(int index) {
|
| +float ExternalFloatArray::get_scalar(int index) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| float* ptr = static_cast<float*>(external_pointer());
|
| return ptr[index];
|
| }
|
|
|
|
|
| +MaybeObject* ExternalFloatArray::get(int index) {
|
| + return GetHeap()->NumberFromDouble(get_scalar(index));
|
| +}
|
| +
|
| +
|
| void ExternalFloatArray::set(int index, float value) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| float* ptr = static_cast<float*>(external_pointer());
|
| @@ -2391,13 +2451,18 @@ void ExternalFloatArray::set(int index, float value) {
|
| }
|
|
|
|
|
| -double ExternalDoubleArray::get(int index) {
|
| +double ExternalDoubleArray::get_scalar(int index) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| double* ptr = static_cast<double*>(external_pointer());
|
| return ptr[index];
|
| }
|
|
|
|
|
| +MaybeObject* ExternalDoubleArray::get(int index) {
|
| + return GetHeap()->NumberFromDouble(get_scalar(index));
|
| +}
|
| +
|
| +
|
| void ExternalDoubleArray::set(int index, double value) {
|
| ASSERT((index >= 0) && (index < this->length()));
|
| double* ptr = static_cast<double*>(external_pointer());
|
| @@ -3328,35 +3393,14 @@ void SharedFunctionInfo::set_optimization_disabled(bool disable) {
|
| }
|
|
|
|
|
| -BOOL_ACCESSORS(SharedFunctionInfo,
|
| - compiler_hints,
|
| - strict_mode,
|
| +BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, strict_mode,
|
| kStrictModeFunction)
|
| -
|
| -
|
| -bool SharedFunctionInfo::native() {
|
| - return BooleanBit::get(compiler_hints(), kNative);
|
| -}
|
| -
|
| -
|
| -void SharedFunctionInfo::set_native(bool value) {
|
| - set_compiler_hints(BooleanBit::set(compiler_hints(),
|
| - kNative,
|
| - value));
|
| -}
|
| -
|
| -
|
| -bool SharedFunctionInfo::bound() {
|
| - return BooleanBit::get(compiler_hints(), kBoundFunction);
|
| -}
|
| -
|
| -
|
| -void SharedFunctionInfo::set_bound(bool value) {
|
| - set_compiler_hints(BooleanBit::set(compiler_hints(),
|
| - kBoundFunction,
|
| - value));
|
| -}
|
| -
|
| +BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, native, kNative)
|
| +BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints,
|
| + name_should_print_as_anonymous,
|
| + kNameShouldPrintAsAnonymous)
|
| +BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, bound, kBoundFunction)
|
| +BOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, is_anonymous, kIsAnonymous)
|
|
|
| ACCESSORS(CodeCache, default_cache, FixedArray, kDefaultCacheOffset)
|
| ACCESSORS(CodeCache, normal_type_cache, Object, kNormalTypeCacheOffset)
|
| @@ -3663,6 +3707,15 @@ ACCESSORS(JSProxy, handler, Object, kHandlerOffset)
|
| ACCESSORS(JSProxy, padding, Object, kPaddingOffset)
|
|
|
|
|
| +ACCESSORS(JSWeakMap, table, ObjectHashTable, kTableOffset)
|
| +ACCESSORS_GCSAFE(JSWeakMap, next, Object, kNextOffset)
|
| +
|
| +
|
| +ObjectHashTable* JSWeakMap::unchecked_table() {
|
| + return reinterpret_cast<ObjectHashTable*>(READ_FIELD(this, kTableOffset));
|
| +}
|
| +
|
| +
|
| Address Foreign::address() {
|
| return AddressFrom<Address>(READ_INTPTR_FIELD(this, kAddressOffset));
|
| }
|
| @@ -3848,6 +3901,11 @@ JSObject::ElementsKind JSObject::GetElementsKind() {
|
| }
|
|
|
|
|
| +ElementsAccessor* JSObject::GetElementsAccessor() {
|
| + return ElementsAccessor::ForKind(GetElementsKind());
|
| +}
|
| +
|
| +
|
| bool JSObject::HasFastElements() {
|
| return GetElementsKind() == FAST_ELEMENTS;
|
| }
|
| @@ -4266,6 +4324,11 @@ MaybeObject* ObjectHashTableShape::AsObject(JSObject* key) {
|
| }
|
|
|
|
|
| +void ObjectHashTable::RemoveEntry(int entry) {
|
| + RemoveEntry(entry, GetHeap());
|
| +}
|
| +
|
| +
|
| void Map::ClearCodeCache(Heap* heap) {
|
| // No write barrier is needed since empty_fixed_array is not in new space.
|
| // Please note this function is used during marking:
|
|
|