Restore performance of accesses to JSGlobalProxy after r22802
R=verwaest@chromium.org Review URL: https://codereview.chromium.org/446523002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22857 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
5a2de1fced
commit
e051112fc6
@ -740,8 +740,8 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
|
||||
prototype = handle(JSObject::cast(current_map->prototype()));
|
||||
if (current_map->is_dictionary_map() &&
|
||||
!current_map->IsJSGlobalObjectMap() &&
|
||||
!current_map->IsJSGlobalProxyMap()) {
|
||||
!current_map->IsJSGlobalObjectMap()) {
|
||||
DCHECK(!current_map->IsJSGlobalProxyMap()); // Proxy maps are fast.
|
||||
if (!name->IsUniqueName()) {
|
||||
DCHECK(name->IsString());
|
||||
name = factory()->InternalizeString(Handle<String>::cast(name));
|
||||
@ -768,6 +768,9 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
// Check access rights to the global object. This has to happen after
|
||||
// the map check so that we know that the object is actually a global
|
||||
// object.
|
||||
// This allows us to install generated handlers for accesses to the
|
||||
// global proxy (as opposed to using slow ICs). See corresponding code
|
||||
// in LookupForRead().
|
||||
if (current_map->IsJSGlobalProxyMap()) {
|
||||
__ CheckAccessGlobalProxy(reg, scratch2, miss);
|
||||
} else if (current_map->IsJSGlobalObjectMap()) {
|
||||
|
@ -691,8 +691,8 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
|
||||
prototype = handle(JSObject::cast(current_map->prototype()));
|
||||
if (current_map->is_dictionary_map() &&
|
||||
!current_map->IsJSGlobalObjectMap() &&
|
||||
!current_map->IsJSGlobalProxyMap()) {
|
||||
!current_map->IsJSGlobalObjectMap()) {
|
||||
DCHECK(!current_map->IsJSGlobalProxyMap()); // Proxy maps are fast.
|
||||
if (!name->IsUniqueName()) {
|
||||
DCHECK(name->IsString());
|
||||
name = factory()->InternalizeString(Handle<String>::cast(name));
|
||||
@ -724,6 +724,9 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
// Check access rights to the global object. This has to happen after
|
||||
// the map check so that we know that the object is actually a global
|
||||
// object.
|
||||
// This allows us to install generated handlers for accesses to the
|
||||
// global proxy (as opposed to using slow ICs). See corresponding code
|
||||
// in LookupForRead().
|
||||
if (current_map->IsJSGlobalProxyMap()) {
|
||||
UseScratchRegisterScope temps(masm());
|
||||
__ CheckAccessGlobalProxy(reg, scratch2, temps.AcquireX(), miss);
|
||||
|
@ -708,8 +708,8 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
|
||||
prototype = handle(JSObject::cast(current_map->prototype()));
|
||||
if (current_map->is_dictionary_map() &&
|
||||
!current_map->IsJSGlobalObjectMap() &&
|
||||
!current_map->IsJSGlobalProxyMap()) {
|
||||
!current_map->IsJSGlobalObjectMap()) {
|
||||
DCHECK(!current_map->IsJSGlobalProxyMap()); // Proxy maps are fast.
|
||||
if (!name->IsUniqueName()) {
|
||||
DCHECK(name->IsString());
|
||||
name = factory()->InternalizeString(Handle<String>::cast(name));
|
||||
@ -738,6 +738,9 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
// Check access rights to the global object. This has to happen after
|
||||
// the map check so that we know that the object is actually a global
|
||||
// object.
|
||||
// This allows us to install generated handlers for accesses to the
|
||||
// global proxy (as opposed to using slow ICs). See corresponding code
|
||||
// in LookupForRead().
|
||||
if (current_map->IsJSGlobalProxyMap()) {
|
||||
__ CheckAccessGlobalProxy(reg, scratch1, scratch2, miss);
|
||||
} else if (current_map->IsJSGlobalObjectMap()) {
|
||||
|
@ -211,6 +211,12 @@ static void LookupForRead(LookupIterator* it) {
|
||||
break;
|
||||
}
|
||||
case LookupIterator::ACCESS_CHECK:
|
||||
// PropertyHandlerCompiler::CheckPrototypes() knows how to emit
|
||||
// access checks for global proxies.
|
||||
if (it->GetHolder<JSObject>()->IsJSGlobalProxy() &&
|
||||
it->HasAccess(v8::ACCESS_GET)) {
|
||||
break;
|
||||
}
|
||||
return;
|
||||
case LookupIterator::PROPERTY:
|
||||
if (it->HasProperty()) return; // Yay!
|
||||
|
@ -739,8 +739,8 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
|
||||
prototype = handle(JSObject::cast(current_map->prototype()));
|
||||
if (current_map->is_dictionary_map() &&
|
||||
!current_map->IsJSGlobalObjectMap() &&
|
||||
!current_map->IsJSGlobalProxyMap()) {
|
||||
!current_map->IsJSGlobalObjectMap()) {
|
||||
DCHECK(!current_map->IsJSGlobalProxyMap()); // Proxy maps are fast.
|
||||
if (!name->IsUniqueName()) {
|
||||
DCHECK(name->IsString());
|
||||
name = factory()->InternalizeString(Handle<String>::cast(name));
|
||||
@ -767,6 +767,9 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
// Check access rights to the global object. This has to happen after
|
||||
// the map check so that we know that the object is actually a global
|
||||
// object.
|
||||
// This allows us to install generated handlers for accesses to the
|
||||
// global proxy (as opposed to using slow ICs). See corresponding code
|
||||
// in LookupForRead().
|
||||
if (current_map->IsJSGlobalProxyMap()) {
|
||||
__ CheckAccessGlobalProxy(reg, scratch2, miss);
|
||||
} else if (current_map->IsJSGlobalObjectMap()) {
|
||||
|
@ -743,8 +743,8 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
|
||||
prototype = handle(JSObject::cast(current_map->prototype()));
|
||||
if (current_map->is_dictionary_map() &&
|
||||
!current_map->IsJSGlobalObjectMap() &&
|
||||
!current_map->IsJSGlobalProxyMap()) {
|
||||
!current_map->IsJSGlobalObjectMap()) {
|
||||
DCHECK(!current_map->IsJSGlobalProxyMap()); // Proxy maps are fast.
|
||||
if (!name->IsUniqueName()) {
|
||||
DCHECK(name->IsString());
|
||||
name = factory()->InternalizeString(Handle<String>::cast(name));
|
||||
@ -777,6 +777,9 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
// Check access rights to the global object. This has to happen after
|
||||
// the map check so that we know that the object is actually a global
|
||||
// object.
|
||||
// This allows us to install generated handlers for accesses to the
|
||||
// global proxy (as opposed to using slow ICs). See corresponding code
|
||||
// in LookupForRead().
|
||||
if (current_map->IsJSGlobalProxyMap()) {
|
||||
__ CheckAccessGlobalProxy(reg, scratch2, miss);
|
||||
} else if (current_map->IsJSGlobalObjectMap()) {
|
||||
|
@ -651,8 +651,8 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
|
||||
prototype = handle(JSObject::cast(current_map->prototype()));
|
||||
if (current_map->is_dictionary_map() &&
|
||||
!current_map->IsJSGlobalObjectMap() &&
|
||||
!current_map->IsJSGlobalProxyMap()) {
|
||||
!current_map->IsJSGlobalObjectMap()) {
|
||||
DCHECK(!current_map->IsJSGlobalProxyMap()); // Proxy maps are fast.
|
||||
if (!name->IsUniqueName()) {
|
||||
DCHECK(name->IsString());
|
||||
name = factory()->InternalizeString(Handle<String>::cast(name));
|
||||
@ -685,6 +685,9 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
// Check access rights to the global object. This has to happen after
|
||||
// the map check so that we know that the object is actually a global
|
||||
// object.
|
||||
// This allows us to install generated handlers for accesses to the
|
||||
// global proxy (as opposed to using slow ICs). See corresponding code
|
||||
// in LookupForRead().
|
||||
if (current_map->IsJSGlobalProxyMap()) {
|
||||
__ CheckAccessGlobalProxy(reg, scratch2, miss);
|
||||
} else if (current_map->IsJSGlobalObjectMap()) {
|
||||
|
@ -707,8 +707,8 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
|
||||
prototype = handle(JSObject::cast(current_map->prototype()));
|
||||
if (current_map->is_dictionary_map() &&
|
||||
!current_map->IsJSGlobalObjectMap() &&
|
||||
!current_map->IsJSGlobalProxyMap()) {
|
||||
!current_map->IsJSGlobalObjectMap()) {
|
||||
DCHECK(!current_map->IsJSGlobalProxyMap()); // Proxy maps are fast.
|
||||
if (!name->IsUniqueName()) {
|
||||
DCHECK(name->IsString());
|
||||
name = factory()->InternalizeString(Handle<String>::cast(name));
|
||||
@ -737,6 +737,9 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
// Check access rights to the global object. This has to happen after
|
||||
// the map check so that we know that the object is actually a global
|
||||
// object.
|
||||
// This allows us to install generated handlers for accesses to the
|
||||
// global proxy (as opposed to using slow ICs). See corresponding code
|
||||
// in LookupForRead().
|
||||
if (current_map->IsJSGlobalProxyMap()) {
|
||||
__ CheckAccessGlobalProxy(reg, scratch1, scratch2, miss);
|
||||
} else if (current_map->IsJSGlobalObjectMap()) {
|
||||
|
Loading…
Reference in New Issue
Block a user