Index: src/ic/ppc/handler-compiler-ppc.cc |
diff --git a/src/ic/ppc/handler-compiler-ppc.cc b/src/ic/ppc/handler-compiler-ppc.cc |
index 4e8cbe1edb27c97786fcb3ad08ad591b0ff74976..55f93a556f7ac3e928617a6e65182ff937b72e6c 100644 |
--- a/src/ic/ppc/handler-compiler-ppc.cc |
+++ b/src/ic/ppc/handler-compiler-ppc.cc |
@@ -427,6 +427,16 @@ Register PropertyHandlerCompiler::CheckPrototypes( |
if (receiver_map->IsJSGlobalObjectMap()) { |
current = isolate()->global_object(); |
} |
+ // 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 (receiver_map->IsJSGlobalProxyMap()) { |
+ __ CheckAccessGlobalProxy(reg, scratch2, miss); |
+ } |
+ |
Handle<JSObject> prototype = Handle<JSObject>::null(); |
Handle<Map> current_map = receiver_map; |
Handle<Map> holder_map(holder()->map()); |
@@ -461,23 +471,14 @@ Register PropertyHandlerCompiler::CheckPrototypes( |
} else { |
Register map_reg = scratch1; |
__ LoadP(map_reg, FieldMemOperand(reg, HeapObject::kMapOffset)); |
- if (depth != 1 || check == CHECK_ALL_MAPS) { |
- Handle<WeakCell> cell = Map::WeakCellForMap(current_map); |
- __ CmpWeakValue(map_reg, cell, scratch2); |
- __ bne(miss); |
- } |
- // 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()) { |
+ if (current_map->IsJSGlobalObjectMap()) { |
GenerateCheckPropertyCell(masm(), Handle<JSGlobalObject>::cast(current), |
name, scratch2, miss); |
+ } else if (depth != 1 || check == CHECK_ALL_MAPS) { |
+ Handle<WeakCell> cell = Map::WeakCellForMap(current_map); |
+ __ CmpWeakValue(map_reg, cell, scratch2); |
+ __ bne(miss); |
} |
reg = holder_reg; // From now on the object will be in holder_reg. |
@@ -501,13 +502,6 @@ Register PropertyHandlerCompiler::CheckPrototypes( |
__ bne(miss); |
} |
- // Perform security check for access to the global object. |
- DCHECK(current_map->IsJSGlobalProxyMap() || |
- !current_map->is_access_check_needed()); |
- if (current_map->IsJSGlobalProxyMap()) { |
- __ CheckAccessGlobalProxy(reg, scratch1, miss); |
- } |
- |
// Return the register containing the holder. |
return reg; |
} |