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/call-optimization.cc b/src/ic/call-optimization.cc
index 45717b5..571b614 100644
--- a/src/ic/call-optimization.cc
+++ b/src/ic/call-optimization.cc
@@ -8,8 +8,16 @@
namespace v8 {
namespace internal {
-CallOptimization::CallOptimization(Handle<JSFunction> function) {
- Initialize(function);
+CallOptimization::CallOptimization(Handle<Object> function) {
+ constant_function_ = Handle<JSFunction>::null();
+ is_simple_api_call_ = false;
+ expected_receiver_type_ = Handle<FunctionTemplateInfo>::null();
+ api_call_info_ = Handle<CallHandlerInfo>::null();
+ if (function->IsJSFunction()) {
+ Initialize(Handle<JSFunction>::cast(function));
+ } else if (function->IsFunctionTemplateInfo()) {
+ Initialize(Handle<FunctionTemplateInfo>::cast(function));
+ }
}
@@ -27,9 +35,8 @@
return Handle<JSObject>::null();
}
for (int depth = 1; true; depth++) {
- if (!object_map->prototype()->IsJSObject()) break;
+ if (!object_map->has_hidden_prototype()) break;
Handle<JSObject> prototype(JSObject::cast(object_map->prototype()));
- if (!prototype->map()->is_hidden_prototype()) break;
object_map = handle(prototype->map());
if (expected_receiver_type_->IsTemplateFor(*object_map)) {
*holder_lookup = kHolderFound;
@@ -80,13 +87,20 @@
return false;
}
+void CallOptimization::Initialize(
+ Handle<FunctionTemplateInfo> function_template_info) {
+ if (function_template_info->call_code()->IsUndefined()) return;
+ api_call_info_ =
+ handle(CallHandlerInfo::cast(function_template_info->call_code()));
+
+ if (!function_template_info->signature()->IsUndefined()) {
+ expected_receiver_type_ =
+ handle(FunctionTemplateInfo::cast(function_template_info->signature()));
+ }
+ is_simple_api_call_ = true;
+}
void CallOptimization::Initialize(Handle<JSFunction> function) {
- constant_function_ = Handle<JSFunction>::null();
- is_simple_api_call_ = false;
- expected_receiver_type_ = Handle<FunctionTemplateInfo>::null();
- api_call_info_ = Handle<CallHandlerInfo>::null();
-
if (function.is_null() || !function->is_compiled()) return;
constant_function_ = function;