always lookup api holder from receiver
R=verwaest@chromium.org BUG= Review URL: https://codereview.chromium.org/219723002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20392 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
660bfe1795
commit
8f0d170c37
@ -5488,16 +5488,11 @@ bool HOptimizedGraphBuilder::PropertyAccessInfo::LoadResult(Handle<Map> map) {
|
||||
Handle<JSFunction> accessor = handle(JSFunction::cast(raw_accessor));
|
||||
if (accessor->shared()->IsApiFunction()) {
|
||||
CallOptimization call_optimization(accessor);
|
||||
if (!call_optimization.is_simple_api_call()) return false;
|
||||
CallOptimization::HolderLookup holder_lookup;
|
||||
api_holder_ = call_optimization.LookupHolderOfExpectedType(
|
||||
map, &holder_lookup);
|
||||
switch (holder_lookup) {
|
||||
case CallOptimization::kHolderNotFound:
|
||||
return false;
|
||||
case CallOptimization::kHolderIsReceiver:
|
||||
case CallOptimization::kHolderFound:
|
||||
break;
|
||||
if (call_optimization.is_simple_api_call()) {
|
||||
CallOptimization::HolderLookup holder_lookup;
|
||||
Handle<Map> receiver_map = this->map();
|
||||
api_holder_ = call_optimization.LookupHolderOfExpectedType(
|
||||
receiver_map, &holder_lookup);
|
||||
}
|
||||
}
|
||||
accessor_ = accessor;
|
||||
@ -7071,6 +7066,11 @@ int HOptimizedGraphBuilder::InliningAstSize(Handle<JSFunction> target) {
|
||||
return target_shared->inline_builtin() ? 0 : kNotInlinable;
|
||||
}
|
||||
|
||||
if (target_shared->IsApiFunction()) {
|
||||
TraceInline(target, caller, "target is api function");
|
||||
return kNotInlinable;
|
||||
}
|
||||
|
||||
// Do a quick check on source code length to avoid parsing large
|
||||
// inlining candidates.
|
||||
if (target_shared->SourceSize() >
|
||||
|
Loading…
Reference in New Issue
Block a user