Revert "Revert "Upgrade to 5.0.71.48"" DO NOT MERGE
This reverts commit f2e3994fa5148cc3d9946666f0b0596290192b0e,
and updates the x64 makefile properly so it doesn't break that
build.
FPIIM-449
Change-Id: Ib83e35bfbae6af627451c926a9650ec57c045605
(cherry picked from commit 109988c7ccb6f3fd1a58574fa3dfb88beaef6632)
diff --git a/src/ic/handler-compiler.cc b/src/ic/handler-compiler.cc
index b353628..803281e 100644
--- a/src/ic/handler-compiler.cc
+++ b/src/ic/handler-compiler.cc
@@ -4,9 +4,10 @@
#include "src/ic/handler-compiler.h"
+#include "src/field-type.h"
#include "src/ic/call-optimization.h"
-#include "src/ic/ic.h"
#include "src/ic/ic-inl.h"
+#include "src/ic/ic.h"
#include "src/isolate-inl.h"
#include "src/profiler/cpu-profiler.h"
@@ -56,11 +57,7 @@
if (name->IsPrivate()) {
// TODO(verwaest): Use nonexistent_private_symbol.
cache_name = name;
- JSReceiver* prototype = JSReceiver::cast(current_map->prototype());
- if (!prototype->map()->is_hidden_prototype() &&
- !prototype->map()->IsJSGlobalObjectMap()) {
- break;
- }
+ if (!current_map->has_hidden_prototype()) break;
}
last = handle(JSObject::cast(current_map->prototype()));
@@ -228,7 +225,7 @@
Handle<Code> NamedLoadHandlerCompiler::CompileLoadCallback(
- Handle<Name> name, Handle<ExecutableAccessorInfo> callback) {
+ Handle<Name> name, Handle<AccessorInfo> callback) {
Register reg = Frontend(name);
GenerateLoadCallback(reg, callback);
return GetCode(kind(), Code::FAST, name);
@@ -278,7 +275,7 @@
Handle<Code> NamedLoadHandlerCompiler::CompileLoadInterceptor(
LookupIterator* it) {
// So far the most popular follow ups for interceptor loads are DATA and
- // ExecutableAccessorInfo, so inline only them. Other cases may be added
+ // AccessorInfo, so inline only them. Other cases may be added
// later.
bool inline_followup = false;
switch (it->state()) {
@@ -296,20 +293,20 @@
break;
case LookupIterator::ACCESSOR: {
Handle<Object> accessors = it->GetAccessors();
- if (accessors->IsExecutableAccessorInfo()) {
- Handle<ExecutableAccessorInfo> info =
- Handle<ExecutableAccessorInfo>::cast(accessors);
- inline_followup = info->getter() != NULL &&
- ExecutableAccessorInfo::IsCompatibleReceiverMap(
- isolate(), info, map());
+ if (accessors->IsAccessorInfo()) {
+ Handle<AccessorInfo> info = Handle<AccessorInfo>::cast(accessors);
+ inline_followup =
+ info->getter() != NULL &&
+ AccessorInfo::IsCompatibleReceiverMap(isolate(), info, map());
} else if (accessors->IsAccessorPair()) {
Handle<JSObject> property_holder(it->GetHolder<JSObject>());
Handle<Object> getter(Handle<AccessorPair>::cast(accessors)->getter(),
isolate());
- if (!getter->IsJSFunction()) break;
+ if (!(getter->IsJSFunction() || getter->IsFunctionTemplateInfo())) {
+ break;
+ }
if (!property_holder->HasFastProperties()) break;
- auto function = Handle<JSFunction>::cast(getter);
- CallOptimization call_optimization(function);
+ CallOptimization call_optimization(getter);
Handle<Map> receiver_map = map();
inline_followup = call_optimization.is_simple_api_call() &&
call_optimization.IsCompatibleReceiverMap(
@@ -396,14 +393,14 @@
break;
}
case LookupIterator::ACCESSOR:
- if (it->GetAccessors()->IsExecutableAccessorInfo()) {
- Handle<ExecutableAccessorInfo> info =
- Handle<ExecutableAccessorInfo>::cast(it->GetAccessors());
+ if (it->GetAccessors()->IsAccessorInfo()) {
+ Handle<AccessorInfo> info =
+ Handle<AccessorInfo>::cast(it->GetAccessors());
DCHECK_NOT_NULL(info->getter());
GenerateLoadCallback(reg, info);
} else {
- auto function = handle(JSFunction::cast(
- AccessorPair::cast(*it->GetAccessors())->getter()));
+ Handle<Object> function = handle(
+ AccessorPair::cast(*it->GetAccessors())->getter(), isolate());
CallOptimization call_optimization(function);
GenerateApiAccessorCall(masm(), call_optimization, holder_map,
receiver(), scratch2(), false, no_reg, reg,
@@ -437,8 +434,9 @@
PrototypeIterator::WhereToEnd end =
name->IsPrivate() ? PrototypeIterator::END_AT_NON_HIDDEN
: PrototypeIterator::END_AT_NULL;
- PrototypeIterator iter(isolate(), holder());
- while (!iter.IsAtEnd(end)) {
+ PrototypeIterator iter(isolate(), holder(),
+ PrototypeIterator::START_AT_PROTOTYPE, end);
+ while (!iter.IsAtEnd()) {
last = PrototypeIterator::GetCurrent<JSObject>(iter);
iter.Advance();
}
@@ -510,10 +508,9 @@
return GetCode(kind(), Code::FAST, name);
}
-
bool NamedStoreHandlerCompiler::RequiresFieldTypeChecks(
- HeapType* field_type) const {
- return !field_type->Classes().Done();
+ FieldType* field_type) const {
+ return field_type->IsClass();
}
@@ -521,7 +518,7 @@
Label miss;
DCHECK(it->representation().IsHeapObject());
- HeapType* field_type = *it->GetFieldType();
+ FieldType* field_type = *it->GetFieldType();
bool need_save_restore = false;
if (RequiresFieldTypeChecks(field_type)) {
need_save_restore = IC::ICUseVector(kind());
@@ -564,10 +561,8 @@
#undef __
-
void ElementHandlerCompiler::CompileElementHandlers(
- MapHandleList* receiver_maps, CodeHandleList* handlers,
- LanguageMode language_mode) {
+ MapHandleList* receiver_maps, CodeHandleList* handlers) {
for (int i = 0; i < receiver_maps->length(); ++i) {
Handle<Map> receiver_map = receiver_maps->at(i);
Handle<Code> cached_stub;
@@ -575,9 +570,7 @@
if (receiver_map->IsStringMap()) {
cached_stub = LoadIndexedStringStub(isolate()).GetCode();
} else if (receiver_map->instance_type() < FIRST_JS_RECEIVER_TYPE) {
- cached_stub = is_strong(language_mode)
- ? isolate()->builtins()->KeyedLoadIC_Slow_Strong()
- : isolate()->builtins()->KeyedLoadIC_Slow();
+ cached_stub = isolate()->builtins()->KeyedLoadIC_Slow();
} else {
bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE;
ElementsKind elements_kind = receiver_map->elements_kind();
@@ -586,9 +579,7 @@
// generated stub code needs to check that dynamically anyway.
bool convert_hole_to_undefined =
(is_js_array && elements_kind == FAST_HOLEY_ELEMENTS &&
- *receiver_map ==
- isolate()->get_initial_js_array_map(elements_kind)) &&
- !is_strong(language_mode);
+ *receiver_map == isolate()->get_initial_js_array_map(elements_kind));
if (receiver_map->has_indexed_interceptor()) {
cached_stub = LoadIndexedInterceptorStub(isolate()).GetCode();
@@ -600,9 +591,7 @@
convert_hole_to_undefined).GetCode();
} else {
DCHECK(elements_kind == DICTIONARY_ELEMENTS);
- LoadICState state =
- LoadICState(is_strong(language_mode) ? LoadICState::kStrongModeState
- : kNoExtraICState);
+ LoadICState state = LoadICState(kNoExtraICState);
cached_stub = LoadDictionaryElementStub(isolate(), state).GetCode();
}
}