Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(431)

Side by Side Diff: src/runtime.cc

Issue 13663: Make sure that the generic stubs for keyed load and store and for... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 12 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/ic-ia32.cc ('k') | test/cctest/test-api.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1715 matching lines...) Expand 10 before | Expand all | Expand 10 after
1726 } 1726 }
1727 1727
1728 1728
1729 1729
1730 // KeyedStringGetProperty is called from KeyedLoadIC::GenerateGeneric. 1730 // KeyedStringGetProperty is called from KeyedLoadIC::GenerateGeneric.
1731 static Object* Runtime_KeyedGetProperty(Arguments args) { 1731 static Object* Runtime_KeyedGetProperty(Arguments args) {
1732 NoHandleAllocation ha; 1732 NoHandleAllocation ha;
1733 ASSERT(args.length() == 2); 1733 ASSERT(args.length() == 2);
1734 1734
1735 // Fast cases for getting named properties of the receiver JSObject 1735 // Fast cases for getting named properties of the receiver JSObject
1736 // itself. The global proxy objects has to be excluded since 1736 // itself.
1737 // LocalLookup on the global proxy object can return a valid result 1737 //
1738 // eventhough the global proxy object never has properties. This is 1738 // The global proxy objects has to be excluded since LocalLookup on
1739 // the case because the global proxy object forwards everything to 1739 // the global proxy object can return a valid result eventhough the
1740 // its hidden prototype including local lookups. 1740 // global proxy object never has properties. This is the case
1741 // because the global proxy object forwards everything to its hidden
1742 // prototype including local lookups.
1743 //
1744 // Additionally, we need to make sure that we do not cache results
1745 // for objects that require access checks.
1741 if (args[0]->IsJSObject() && 1746 if (args[0]->IsJSObject() &&
1742 !args[0]->IsJSGlobalProxy() && 1747 !args[0]->IsJSGlobalProxy() &&
1748 !args[0]->IsAccessCheckNeeded() &&
1743 args[1]->IsString()) { 1749 args[1]->IsString()) {
1744 JSObject* receiver = JSObject::cast(args[0]); 1750 JSObject* receiver = JSObject::cast(args[0]);
1745 String* key = String::cast(args[1]); 1751 String* key = String::cast(args[1]);
1746 if (receiver->HasFastProperties()) { 1752 if (receiver->HasFastProperties()) {
1747 // Attempt to use lookup cache. 1753 // Attempt to use lookup cache.
1748 Object* obj = Heap::GetKeyedLookupCache(); 1754 Object* obj = Heap::GetKeyedLookupCache();
1749 if (obj->IsFailure()) return obj; 1755 if (obj->IsFailure()) return obj;
1750 LookupCache* cache = LookupCache::cast(obj); 1756 LookupCache* cache = LookupCache::cast(obj);
1751 Map* receiver_map = receiver->map(); 1757 Map* receiver_map = receiver->map();
1752 int offset = cache->Lookup(receiver_map, key); 1758 int offset = cache->Lookup(receiver_map, key);
(...skipping 4155 matching lines...) Expand 10 before | Expand all | Expand 10 after
5908 } else { 5914 } else {
5909 // Handle last resort GC and make sure to allow future allocations 5915 // Handle last resort GC and make sure to allow future allocations
5910 // to grow the heap without causing GCs (if possible). 5916 // to grow the heap without causing GCs (if possible).
5911 Counters::gc_last_resort_from_js.Increment(); 5917 Counters::gc_last_resort_from_js.Increment();
5912 Heap::CollectAllGarbage(); 5918 Heap::CollectAllGarbage();
5913 } 5919 }
5914 } 5920 }
5915 5921
5916 5922
5917 } } // namespace v8::internal 5923 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ic-ia32.cc ('k') | test/cctest/test-api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698