Upgrade V8 to 5.1.281.57 DO NOT MERGE
FPIIM-449
Change-Id: Id981b686b4d587ac31697662eb98bb34be42ad90
(cherry picked from commit 3b9bc31999c9787eb726ecdbfd5796bfdec32a18)
diff --git a/src/objects-inl.h b/src/objects-inl.h
index e00478a..f4d7fb9 100644
--- a/src/objects-inl.h
+++ b/src/objects-inl.h
@@ -22,6 +22,7 @@
#include "src/heap/heap-inl.h"
#include "src/heap/heap.h"
#include "src/isolate.h"
+#include "src/isolate-inl.h"
#include "src/layout-descriptor-inl.h"
#include "src/lookup.h"
#include "src/objects.h"
@@ -738,13 +739,12 @@
bool HeapObject::IsContext() const {
Map* map = this->map();
Heap* heap = GetHeap();
- return (map == heap->function_context_map() ||
- map == heap->catch_context_map() ||
- map == heap->with_context_map() ||
- map == heap->native_context_map() ||
- map == heap->block_context_map() ||
- map == heap->module_context_map() ||
- map == heap->script_context_map());
+ return (
+ map == heap->function_context_map() || map == heap->catch_context_map() ||
+ map == heap->with_context_map() || map == heap->native_context_map() ||
+ map == heap->block_context_map() || map == heap->module_context_map() ||
+ map == heap->script_context_map() ||
+ map == heap->debug_evaluate_context_map());
}
bool HeapObject::IsNativeContext() const {
@@ -845,6 +845,8 @@
bool HeapObject::IsStringTable() const { return IsHashTable(); }
+bool HeapObject::IsStringSet() const { return IsHashTable(); }
+
bool HeapObject::IsNormalizedMapCache() const {
return NormalizedMapCache::IsNormalizedMapCache(this);
}
@@ -908,9 +910,7 @@
TYPE_CHECKER(JSGlobalObject, JS_GLOBAL_OBJECT_TYPE)
-bool HeapObject::IsUndetectableObject() const {
- return map()->is_undetectable();
-}
+bool HeapObject::IsUndetectable() const { return map()->is_undetectable(); }
bool HeapObject::IsAccessCheckNeeded() const {
if (IsJSGlobalProxy()) {
@@ -1003,6 +1003,24 @@
return true;
}
+bool Object::ToUint32(uint32_t* value) {
+ if (IsSmi()) {
+ int num = Smi::cast(this)->value();
+ if (num < 0) return false;
+ *value = static_cast<uint32_t>(num);
+ return true;
+ }
+ if (IsHeapNumber()) {
+ double num = HeapNumber::cast(this)->value();
+ if (num < 0) return false;
+ uint32_t uint_value = FastD2UI(num);
+ if (FastUI2D(uint_value) == num) {
+ *value = uint_value;
+ return true;
+ }
+ }
+ return false;
+}
// static
MaybeHandle<JSReceiver> Object::ToObject(Isolate* isolate,
@@ -1013,6 +1031,12 @@
// static
+MaybeHandle<Name> Object::ToName(Isolate* isolate, Handle<Object> input) {
+ if (input->IsName()) return Handle<Name>::cast(input);
+ return ConvertToName(isolate, input);
+}
+
+// static
MaybeHandle<Object> Object::ToPrimitive(Handle<Object> input,
ToPrimitiveHint hint) {
if (input->IsPrimitive()) return input;
@@ -1027,15 +1051,39 @@
MaybeHandle<Object> Object::GetProperty(Handle<Object> object,
Handle<Name> name) {
LookupIterator it(object, name);
+ if (!it.IsFound()) return it.factory()->undefined_value();
return GetProperty(&it);
}
+MaybeHandle<Object> JSReceiver::GetProperty(Handle<JSReceiver> receiver,
+ Handle<Name> name) {
+ LookupIterator it(receiver, name, receiver);
+ if (!it.IsFound()) return it.factory()->undefined_value();
+ return Object::GetProperty(&it);
+}
+
MaybeHandle<Object> Object::GetElement(Isolate* isolate, Handle<Object> object,
uint32_t index) {
LookupIterator it(isolate, object, index);
+ if (!it.IsFound()) return it.factory()->undefined_value();
return GetProperty(&it);
}
+MaybeHandle<Object> JSReceiver::GetElement(Isolate* isolate,
+ Handle<JSReceiver> receiver,
+ uint32_t index) {
+ LookupIterator it(isolate, receiver, index, receiver);
+ if (!it.IsFound()) return it.factory()->undefined_value();
+ return Object::GetProperty(&it);
+}
+
+Handle<Object> JSReceiver::GetDataProperty(Handle<JSReceiver> object,
+ Handle<Name> name) {
+ LookupIterator it(object, name, object,
+ LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR);
+ if (!it.IsFound()) return it.factory()->undefined_value();
+ return GetDataProperty(&it);
+}
MaybeHandle<Object> Object::SetElement(Isolate* isolate, Handle<Object> object,
uint32_t index, Handle<Object> value,
@@ -1059,10 +1107,11 @@
return PrototypeIterator::GetCurrent(iter);
}
-MaybeHandle<Object> Object::GetProperty(Isolate* isolate, Handle<Object> object,
- const char* name) {
+MaybeHandle<Object> JSReceiver::GetProperty(Isolate* isolate,
+ Handle<JSReceiver> receiver,
+ const char* name) {
Handle<String> str = isolate->factory()->InternalizeUtf8String(name);
- return GetProperty(object, str);
+ return GetProperty(receiver, str);
}
@@ -1836,17 +1885,33 @@
InterceptorInfo* JSObject::GetIndexedInterceptor() {
- DCHECK(map()->has_indexed_interceptor());
- JSFunction* constructor = JSFunction::cast(map()->GetConstructor());
+ return map()->GetIndexedInterceptor();
+}
+
+InterceptorInfo* JSObject::GetNamedInterceptor() {
+ return map()->GetNamedInterceptor();
+}
+
+InterceptorInfo* Map::GetNamedInterceptor() {
+ DCHECK(has_named_interceptor());
+ JSFunction* constructor = JSFunction::cast(GetConstructor());
DCHECK(constructor->shared()->IsApiFunction());
- Object* result =
- constructor->shared()->get_api_func_data()->indexed_property_handler();
- return InterceptorInfo::cast(result);
+ return InterceptorInfo::cast(
+ constructor->shared()->get_api_func_data()->named_property_handler());
+}
+
+InterceptorInfo* Map::GetIndexedInterceptor() {
+ DCHECK(has_indexed_interceptor());
+ JSFunction* constructor = JSFunction::cast(GetConstructor());
+ DCHECK(constructor->shared()->IsApiFunction());
+ return InterceptorInfo::cast(
+ constructor->shared()->get_api_func_data()->indexed_property_handler());
}
ACCESSORS(Oddball, to_string, String, kToStringOffset)
ACCESSORS(Oddball, to_number, Object, kToNumberOffset)
+ACCESSORS(Oddball, to_boolean, Oddball, kToBooleanOffset)
ACCESSORS(Oddball, type_of, String, kTypeOfOffset)
@@ -1896,11 +1961,14 @@
void WeakCell::initialize(HeapObject* val) {
WRITE_FIELD(this, kValueOffset, val);
- Heap* heap = GetHeap();
// We just have to execute the generational barrier here because we never
// mark through a weak cell and collect evacuation candidates when we process
// all weak cells.
- heap->RecordWrite(this, kValueOffset, val);
+ WriteBarrierMode mode =
+ Page::FromAddress(this->address())->IsFlagSet(Page::BLACK_PAGE)
+ ? UPDATE_WRITE_BARRIER
+ : UPDATE_WEAK_WRITE_BARRIER;
+ CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kValueOffset, val, mode);
}
@@ -1936,6 +2004,8 @@
// field operations considerably on average.
if (type == JS_OBJECT_TYPE) return JSObject::kHeaderSize;
switch (type) {
+ case JS_SPECIAL_API_OBJECT_TYPE:
+ return JSObject::kHeaderSize;
case JS_GENERATOR_OBJECT_TYPE:
return JSGeneratorObject::kSize;
case JS_MODULE_TYPE:
@@ -2182,7 +2252,6 @@
}
}
-
bool Object::ToArrayLength(uint32_t* index) { return Object::ToUint32(index); }
@@ -2929,6 +2998,9 @@
return Max(capacity, kMinCapacity);
}
+bool HashTableBase::IsKey(Heap* heap, Object* k) {
+ return k != heap->the_hole_value() && k != heap->undefined_value();
+}
bool HashTableBase::IsKey(Object* k) {
return !k->IsTheHole() && !k->IsUndefined();
@@ -2977,6 +3049,15 @@
return kNotFound;
}
+bool StringSetShape::IsMatch(String* key, Object* value) {
+ return value->IsString() && key->Equals(String::cast(value));
+}
+
+uint32_t StringSetShape::Hash(String* key) { return key->Hash(); }
+
+uint32_t StringSetShape::HashForObject(String* key, Object* object) {
+ return object->IsString() ? String::cast(object)->Hash() : 0;
+}
bool SeededNumberDictionary::requires_slow_elements() {
Object* max_index_object = get(kMaxNumberKeyIndex);
@@ -3080,6 +3161,7 @@
CAST_ACCESSOR(SlicedString)
CAST_ACCESSOR(Smi)
CAST_ACCESSOR(String)
+CAST_ACCESSOR(StringSet)
CAST_ACCESSOR(StringTable)
CAST_ACCESSOR(Struct)
CAST_ACCESSOR(Symbol)
@@ -3902,10 +3984,9 @@
ACCESSORS(BytecodeArray, constant_pool, FixedArray, kConstantPoolOffset)
ACCESSORS(BytecodeArray, handler_table, FixedArray, kHandlerTableOffset)
-ACCESSORS(BytecodeArray, source_position_table, FixedArray,
+ACCESSORS(BytecodeArray, source_position_table, ByteArray,
kSourcePositionTableOffset)
-
Address BytecodeArray::GetFirstBytecodeAddress() {
return reinterpret_cast<Address>(this) - kHeapObjectTag + kHeaderSize;
}
@@ -4514,16 +4595,6 @@
}
-void Map::set_is_strong() {
- set_bit_field3(IsStrong::update(bit_field3(), true));
-}
-
-
-bool Map::is_strong() {
- return IsStrong::decode(bit_field3());
-}
-
-
void Map::set_new_target_is_base(bool value) {
set_bit_field3(NewTargetIsBase::update(bit_field3(), value));
}
@@ -4690,8 +4761,7 @@
return kind() == STUB || kind() == HANDLER || kind() == LOAD_IC ||
kind() == KEYED_LOAD_IC || kind() == CALL_IC || kind() == STORE_IC ||
kind() == KEYED_STORE_IC || kind() == BINARY_OP_IC ||
- kind() == COMPARE_IC || kind() == COMPARE_NIL_IC ||
- kind() == TO_BOOLEAN_IC;
+ kind() == COMPARE_IC || kind() == TO_BOOLEAN_IC;
}
@@ -4723,7 +4793,6 @@
return ExtractTypeFromFlags(flags());
}
-
// For initialization.
void Code::set_raw_kind_specific_flags1(int value) {
WRITE_INT_FIELD(this, kKindSpecificFlags1Offset, value);
@@ -4870,14 +4939,10 @@
}
}
-
-int Code::builtin_index() {
- return READ_INT32_FIELD(this, kKindSpecificFlags1Offset);
-}
-
+int Code::builtin_index() { return READ_INT_FIELD(this, kBuiltinIndexOffset); }
void Code::set_builtin_index(int index) {
- WRITE_INT32_FIELD(this, kKindSpecificFlags1Offset, index);
+ WRITE_INT_FIELD(this, kBuiltinIndexOffset, index);
}
@@ -4981,15 +5046,14 @@
bool Code::is_call_stub() { return kind() == CALL_IC; }
bool Code::is_binary_op_stub() { return kind() == BINARY_OP_IC; }
bool Code::is_compare_ic_stub() { return kind() == COMPARE_IC; }
-bool Code::is_compare_nil_ic_stub() { return kind() == COMPARE_NIL_IC; }
bool Code::is_to_boolean_ic_stub() { return kind() == TO_BOOLEAN_IC; }
bool Code::is_optimized_code() { return kind() == OPTIMIZED_FUNCTION; }
-
+bool Code::is_wasm_code() { return kind() == WASM_FUNCTION; }
bool Code::embeds_maps_weakly() {
Kind k = kind();
return (k == LOAD_IC || k == STORE_IC || k == KEYED_LOAD_IC ||
- k == KEYED_STORE_IC || k == COMPARE_NIL_IC) &&
+ k == KEYED_STORE_IC) &&
ic_state() == MONOMORPHIC;
}
@@ -5005,20 +5069,17 @@
return constant_pool;
}
-
Code::Flags Code::ComputeFlags(Kind kind, InlineCacheState ic_state,
ExtraICState extra_ic_state, StubType type,
CacheHolderFlag holder) {
// Compute the bit mask.
- unsigned int bits = KindField::encode(kind)
- | ICStateField::encode(ic_state)
- | TypeField::encode(type)
- | ExtraICStateField::encode(extra_ic_state)
- | CacheHolderField::encode(holder);
+ unsigned int bits = KindField::encode(kind) | ICStateField::encode(ic_state) |
+ TypeField::encode(type) |
+ ExtraICStateField::encode(extra_ic_state) |
+ CacheHolderField::encode(holder);
return static_cast<Flags>(bits);
}
-
Code::Flags Code::ComputeMonomorphicFlags(Kind kind,
ExtraICState extra_ic_state,
CacheHolderFlag holder,
@@ -5052,7 +5113,6 @@
return TypeField::decode(flags);
}
-
CacheHolderFlag Code::ExtractCacheHolderFromFlags(Flags flags) {
return CacheHolderField::decode(flags);
}
@@ -5135,7 +5195,7 @@
friend class Code;
};
-int AbstractCode::Size() {
+int AbstractCode::instruction_size() {
if (IsCode()) {
return GetCode()->instruction_size();
} else {
@@ -5143,6 +5203,45 @@
}
}
+int AbstractCode::ExecutableSize() {
+ if (IsCode()) {
+ return GetCode()->ExecutableSize();
+ } else {
+ return GetBytecodeArray()->BytecodeArraySize();
+ }
+}
+
+Address AbstractCode::instruction_start() {
+ if (IsCode()) {
+ return GetCode()->instruction_start();
+ } else {
+ return GetBytecodeArray()->GetFirstBytecodeAddress();
+ }
+}
+
+Address AbstractCode::instruction_end() {
+ if (IsCode()) {
+ return GetCode()->instruction_end();
+ } else {
+ return GetBytecodeArray()->GetFirstBytecodeAddress() +
+ GetBytecodeArray()->length();
+ }
+}
+
+bool AbstractCode::contains(byte* inner_pointer) {
+ return (address() <= inner_pointer) && (inner_pointer <= address() + Size());
+}
+
+AbstractCode::Kind AbstractCode::kind() {
+ if (IsCode()) {
+ STATIC_ASSERT(AbstractCode::FUNCTION ==
+ static_cast<AbstractCode::Kind>(Code::FUNCTION));
+ return static_cast<AbstractCode::Kind>(GetCode()->kind());
+ } else {
+ return INTERPRETED_FUNCTION;
+ }
+}
+
Code* AbstractCode::GetCode() { return Code::cast(this); }
BytecodeArray* AbstractCode::GetBytecodeArray() {
@@ -5500,8 +5599,8 @@
ACCESSORS(SharedFunctionInfo, function_data, Object, kFunctionDataOffset)
ACCESSORS(SharedFunctionInfo, script, Object, kScriptOffset)
ACCESSORS(SharedFunctionInfo, debug_info, Object, kDebugInfoOffset)
-ACCESSORS(SharedFunctionInfo, inferred_name, String, kInferredNameOffset)
-
+ACCESSORS(SharedFunctionInfo, function_identifier, Object,
+ kFunctionIdentifierOffset)
SMI_ACCESSORS(FunctionTemplateInfo, length, kLengthOffset)
BOOL_ACCESSORS(FunctionTemplateInfo, flag, hidden_prototype,
@@ -5634,6 +5733,13 @@
optimization_disabled,
kOptimizationDisabled)
+AbstractCode* SharedFunctionInfo::abstract_code() {
+ if (HasBytecodeArray()) {
+ return AbstractCode::cast(bytecode_array());
+ } else {
+ return AbstractCode::cast(code());
+ }
+}
void SharedFunctionInfo::set_optimization_disabled(bool disable) {
set_compiler_hints(BooleanBit::set(compiler_hints(),
@@ -5645,8 +5751,7 @@
LanguageMode SharedFunctionInfo::language_mode() {
STATIC_ASSERT(LANGUAGE_END == 3);
return construct_language_mode(
- BooleanBit::get(compiler_hints(), kStrictModeFunction),
- BooleanBit::get(compiler_hints(), kStrongModeFunction));
+ BooleanBit::get(compiler_hints(), kStrictModeFunction));
}
@@ -5657,7 +5762,6 @@
DCHECK(is_sloppy(this->language_mode()) || is_strict(language_mode));
int hints = compiler_hints();
hints = BooleanBit::set(hints, kStrictModeFunction, is_strict(language_mode));
- hints = BooleanBit::set(hints, kStrongModeFunction, is_strong(language_mode));
set_compiler_hints(hints);
}
@@ -5719,7 +5823,7 @@
void SharedFunctionInfo::DontAdaptArguments() {
- DCHECK(code()->kind() == Code::BUILTIN);
+ DCHECK(code()->kind() == Code::BUILTIN || code()->kind() == Code::STUB);
set_internal_formal_parameter_count(kDontAdaptArgumentsSentinel);
}
@@ -5824,18 +5928,11 @@
return FunctionTemplateInfo::cast(function_data());
}
-
-bool SharedFunctionInfo::HasBuiltinFunctionId() {
- return function_data()->IsSmi();
+void SharedFunctionInfo::set_api_func_data(FunctionTemplateInfo* data) {
+ DCHECK(function_data()->IsUndefined());
+ set_function_data(data);
}
-
-BuiltinFunctionId SharedFunctionInfo::builtin_function_id() {
- DCHECK(HasBuiltinFunctionId());
- return static_cast<BuiltinFunctionId>(Smi::cast(function_data())->value());
-}
-
-
bool SharedFunctionInfo::HasBytecodeArray() {
return function_data()->IsBytecodeArray();
}
@@ -5846,6 +5943,46 @@
return BytecodeArray::cast(function_data());
}
+void SharedFunctionInfo::set_bytecode_array(BytecodeArray* bytecode) {
+ DCHECK(function_data()->IsUndefined());
+ set_function_data(bytecode);
+}
+
+void SharedFunctionInfo::ClearBytecodeArray() {
+ DCHECK(function_data()->IsUndefined() || HasBytecodeArray());
+ set_function_data(GetHeap()->undefined_value());
+}
+
+bool SharedFunctionInfo::HasBuiltinFunctionId() {
+ return function_identifier()->IsSmi();
+}
+
+BuiltinFunctionId SharedFunctionInfo::builtin_function_id() {
+ DCHECK(HasBuiltinFunctionId());
+ return static_cast<BuiltinFunctionId>(
+ Smi::cast(function_identifier())->value());
+}
+
+void SharedFunctionInfo::set_builtin_function_id(BuiltinFunctionId id) {
+ set_function_identifier(Smi::FromInt(id));
+}
+
+bool SharedFunctionInfo::HasInferredName() {
+ return function_identifier()->IsString();
+}
+
+String* SharedFunctionInfo::inferred_name() {
+ if (HasInferredName()) {
+ return String::cast(function_identifier());
+ }
+ DCHECK(function_identifier()->IsUndefined() || HasBuiltinFunctionId());
+ return GetIsolate()->heap()->empty_string();
+}
+
+void SharedFunctionInfo::set_inferred_name(String* inferred_name) {
+ DCHECK(function_identifier()->IsUndefined() || HasInferredName());
+ set_function_identifier(inferred_name);
+}
int SharedFunctionInfo::ic_age() {
return ICAgeBits::decode(counters());
@@ -5944,26 +6081,6 @@
}
-// static
-void SharedFunctionInfo::AddToOptimizedCodeMap(
- Handle<SharedFunctionInfo> shared, Handle<Context> native_context,
- Handle<Code> code, Handle<LiteralsArray> literals, BailoutId osr_ast_id) {
- AddToOptimizedCodeMapInternal(shared, native_context, code, literals,
- osr_ast_id);
-}
-
-
-// static
-void SharedFunctionInfo::AddLiteralsToOptimizedCodeMap(
- Handle<SharedFunctionInfo> shared, Handle<Context> native_context,
- Handle<LiteralsArray> literals) {
- Isolate* isolate = shared->GetIsolate();
- Handle<Oddball> undefined = isolate->factory()->undefined_value();
- AddToOptimizedCodeMapInternal(shared, native_context, undefined, literals,
- BailoutId::None());
-}
-
-
bool JSFunction::IsOptimized() {
return code()->kind() == Code::OPTIMIZED_FUNCTION;
}
@@ -6008,6 +6125,14 @@
}
}
+AbstractCode* JSFunction::abstract_code() {
+ Code* code = this->code();
+ if (code->is_interpreter_entry_trampoline()) {
+ return AbstractCode::cast(shared()->bytecode_array());
+ } else {
+ return AbstractCode::cast(code);
+ }
+}
Code* JSFunction::code() {
return Code::cast(
@@ -6939,6 +7064,17 @@
return GetProperty(&it);
}
+MaybeHandle<Object> Object::SetPropertyOrElement(Handle<Object> object,
+ Handle<Name> name,
+ Handle<Object> value,
+ LanguageMode language_mode,
+ StoreFromKeyed store_mode) {
+ LookupIterator it =
+ LookupIterator::PropertyOrElement(name->GetIsolate(), object, name);
+ MAYBE_RETURN_NULL(SetProperty(&it, value, language_mode, store_mode));
+ return value;
+}
+
MaybeHandle<Object> Object::GetPropertyOrElement(Handle<Object> receiver,
Handle<Name> name,
Handle<JSReceiver> holder) {
@@ -6972,11 +7108,10 @@
return NameDictionary::cast(properties());
}
-
Maybe<bool> JSReceiver::HasProperty(Handle<JSReceiver> object,
Handle<Name> name) {
- LookupIterator it =
- LookupIterator::PropertyOrElement(object->GetIsolate(), object, name);
+ LookupIterator it = LookupIterator::PropertyOrElement(object->GetIsolate(),
+ object, name, object);
return HasProperty(&it);
}
@@ -6985,7 +7120,7 @@
Handle<Name> name) {
if (object->IsJSObject()) { // Shortcut
LookupIterator it = LookupIterator::PropertyOrElement(
- object->GetIsolate(), object, name, LookupIterator::HIDDEN);
+ object->GetIsolate(), object, name, object, LookupIterator::HIDDEN);
return HasProperty(&it);
}
@@ -6998,8 +7133,8 @@
Maybe<PropertyAttributes> JSReceiver::GetPropertyAttributes(
Handle<JSReceiver> object, Handle<Name> name) {
- LookupIterator it =
- LookupIterator::PropertyOrElement(name->GetIsolate(), object, name);
+ LookupIterator it = LookupIterator::PropertyOrElement(name->GetIsolate(),
+ object, name, object);
return GetPropertyAttributes(&it);
}
@@ -7007,13 +7142,13 @@
Maybe<PropertyAttributes> JSReceiver::GetOwnPropertyAttributes(
Handle<JSReceiver> object, Handle<Name> name) {
LookupIterator it = LookupIterator::PropertyOrElement(
- name->GetIsolate(), object, name, LookupIterator::HIDDEN);
+ name->GetIsolate(), object, name, object, LookupIterator::HIDDEN);
return GetPropertyAttributes(&it);
}
Maybe<bool> JSReceiver::HasElement(Handle<JSReceiver> object, uint32_t index) {
- LookupIterator it(object->GetIsolate(), object, index);
+ LookupIterator it(object->GetIsolate(), object, index, object);
return HasProperty(&it);
}
@@ -7021,7 +7156,7 @@
Maybe<PropertyAttributes> JSReceiver::GetElementAttributes(
Handle<JSReceiver> object, uint32_t index) {
Isolate* isolate = object->GetIsolate();
- LookupIterator it(isolate, object, index);
+ LookupIterator it(isolate, object, index, object);
return GetPropertyAttributes(&it);
}
@@ -7029,7 +7164,7 @@
Maybe<PropertyAttributes> JSReceiver::GetOwnElementAttributes(
Handle<JSReceiver> object, uint32_t index) {
Isolate* isolate = object->GetIsolate();
- LookupIterator it(isolate, object, index, LookupIterator::HIDDEN);
+ LookupIterator it(isolate, object, index, object, LookupIterator::HIDDEN);
return GetPropertyAttributes(&it);
}
@@ -7052,11 +7187,12 @@
: JSObject::GetOrCreateIdentityHash(Handle<JSObject>::cast(object));
}
-
-Object* JSReceiver::GetIdentityHash() {
- return IsJSProxy()
- ? JSProxy::cast(this)->GetIdentityHash()
- : JSObject::cast(this)->GetIdentityHash();
+Handle<Object> JSReceiver::GetIdentityHash(Isolate* isolate,
+ Handle<JSReceiver> receiver) {
+ return receiver->IsJSProxy() ? JSProxy::GetIdentityHash(
+ isolate, Handle<JSProxy>::cast(receiver))
+ : JSObject::GetIdentityHash(
+ isolate, Handle<JSObject>::cast(receiver));
}
@@ -7089,6 +7225,11 @@
set_flag(BooleanBit::set(flag(), kSpecialDataProperty, value));
}
+bool AccessorInfo::is_sloppy() { return BooleanBit::get(flag(), kIsSloppy); }
+
+void AccessorInfo::set_is_sloppy(bool value) {
+ set_flag(BooleanBit::set(flag(), kIsSloppy, value));
+}
PropertyAttributes AccessorInfo::property_attributes() {
return AttributesField::decode(static_cast<uint32_t>(flag()));
@@ -7448,6 +7589,11 @@
}
+bool JSArray::HasArrayPrototype(Isolate* isolate) {
+ return map()->prototype() == *isolate->initial_array_prototype();
+}
+
+
int TypeFeedbackInfo::ic_total_count() {
int current = Smi::cast(READ_FIELD(this, kStorage1Offset))->value();
return ICTotalCountField::decode(current);
@@ -7645,6 +7791,30 @@
return value & MemoryChunk::kAlignmentMask;
}
+static inline Handle<Object> MakeEntryPair(Isolate* isolate, uint32_t index,
+ Handle<Object> value) {
+ Handle<Object> key = isolate->factory()->Uint32ToString(index);
+ Handle<FixedArray> entry_storage =
+ isolate->factory()->NewUninitializedFixedArray(2);
+ {
+ entry_storage->set(0, *key, SKIP_WRITE_BARRIER);
+ entry_storage->set(1, *value, SKIP_WRITE_BARRIER);
+ }
+ return isolate->factory()->NewJSArrayWithElements(entry_storage,
+ FAST_ELEMENTS, 2);
+}
+
+static inline Handle<Object> MakeEntryPair(Isolate* isolate, Handle<Name> key,
+ Handle<Object> value) {
+ Handle<FixedArray> entry_storage =
+ isolate->factory()->NewUninitializedFixedArray(2);
+ {
+ entry_storage->set(0, *key, SKIP_WRITE_BARRIER);
+ entry_storage->set(1, *value, SKIP_WRITE_BARRIER);
+ }
+ return isolate->factory()->NewJSArrayWithElements(entry_storage,
+ FAST_ELEMENTS, 2);
+}
#undef TYPE_CHECKER
#undef CAST_ACCESSOR