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

Unified Diff: src/objects.h

Issue 457: Added a EvalCache that caches eval'ed scripts and compiled function boilerpla... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 12 years, 3 months 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 side-by-side diff with in-line comments
Download patch
Index: src/objects.h
===================================================================
--- src/objects.h (revision 147)
+++ src/objects.h (working copy)
@@ -614,6 +614,7 @@
inline bool IsHashTable();
inline bool IsDictionary();
inline bool IsSymbolTable();
+ inline bool IsEvalCache();
inline bool IsPrimitive();
inline bool IsGlobalObject();
inline bool IsJSGlobalObject();
@@ -1681,6 +1682,26 @@
// table. The prefix size indicates an amount of memory in the
// beginning of the backing storage that can be used for non-element
// information by subclasses.
+
+// HashTableKey is an abstract superclass keys.
+class HashTableKey {
+ public:
+ // Returns whether the other object matches this key.
+ virtual bool IsMatch(Object* other) = 0;
+ typedef uint32_t (*HashFunction)(Object* obj);
+ // Returns the hash function used for this key.
+ virtual HashFunction GetHashFunction() = 0;
+ // Returns the hash value for this key.
+ virtual uint32_t Hash() = 0;
+ // Returns the key object for storing into the dictionary.
+ // If allocations fails a failure object is returned.
+ virtual Object* GetObject() = 0;
+ virtual bool IsStringKey() = 0;
+ // Required.
+ virtual ~HashTableKey() {}
+};
+
+
template<int prefix_size, int element_size>
class HashTable: public FixedArray {
public:
@@ -1722,24 +1743,6 @@
// Casting.
static inline HashTable* cast(Object* obj);
- // Key is an abstract superclass keys.
- class Key {
- public:
- // Returns whether the other object matches this key.
- virtual bool IsMatch(Object* other) = 0;
- typedef uint32_t (*HashFunction)(Object* obj);
- // Returns the hash function used for this key.
- virtual HashFunction GetHashFunction() = 0;
- // Returns the hash value for this key.
- virtual uint32_t Hash() = 0;
- // Returns the key object for storing into the dictionary.
- // If allocations fails a failure object is returned.
- virtual Object* GetObject() = 0;
- virtual bool IsStringKey() = 0;
- // Required.
- virtual ~Key() {}
- };
-
// Compute the probe offset (quadratic probing).
INLINE(static uint32_t GetProbeOffset(uint32_t n)) {
return (n + n * n) >> 1;
@@ -1755,7 +1758,7 @@
protected:
// Find entry for key otherwise return -1.
- int FindEntry(Key* key);
+ int FindEntry(HashTableKey* key);
// Find the entry at which to insert element with the given key that
// has the given hash value.
@@ -1788,7 +1791,7 @@
}
// Ensure enough space for n additional elements.
- Object* EnsureCapacity(int n, Key* key);
+ Object* EnsureCapacity(int n, HashTableKey* key);
};
@@ -1809,14 +1812,28 @@
static inline SymbolTable* cast(Object* obj);
private:
- Object* LookupKey(Key* key, Object** s);
- class Utf8Key; // Key based on utf8 string.
- class StringKey; // Key based on String*.
+ Object* LookupKey(HashTableKey* key, Object** s);
DISALLOW_IMPLICIT_CONSTRUCTORS(SymbolTable);
};
+// EvalCache for caching eval'ed string and function.
Kasper Lund 2008/09/05 09:16:29 Rename to CompilationCacheTable?
Feng Qian 2008/09/09 03:42:50 Done.
+//
+// The cache is cleaned up during a mark-compact GC.
+class EvalCache: public HashTable<0, 2> {
+ public:
+ // Find cached value for a string key, otherwise return null.
+ Object* Lookup(String* src);
+ Object* Put(String* src, Object* value);
+
+ static inline EvalCache* cast(Object* obj);
+
+ private:
+ DISALLOW_IMPLICIT_CONSTRUCTORS(EvalCache);
+};
+
+
// Dictionary for keeping properties and elements in slow case.
//
// One element in the prefix is used for storing non-element
@@ -1924,7 +1941,7 @@
static Object* Allocate(int at_least_space_for);
// Ensure enough space for n additional elements.
- Object* EnsureCapacity(int n, Key* key);
+ Object* EnsureCapacity(int n, HashTableKey* key);
#ifdef DEBUG
void Print();
@@ -1939,9 +1956,9 @@
private:
// Generic at put operation.
- Object* AtPut(Key* key, Object* value);
+ Object* AtPut(HashTableKey* key, Object* value);
- Object* Add(Key* key, Object* value, PropertyDetails details);
+ Object* Add(HashTableKey* key, Object* value, PropertyDetails details);
// Add entry to dictionary.
void AddEntry(Object* key,
@@ -1963,9 +1980,6 @@
static const int kMaxNumberKeyIndex = kPrefixStartIndex;
static const int kNextEnumnerationIndexIndex = kMaxNumberKeyIndex + 1;
- class NumberKey; // Key containing uint32_t.
- class StringKey; // Key containing String*.
-
DISALLOW_IMPLICIT_CONSTRUCTORS(Dictionary);
};

Powered by Google App Engine
This is Rietveld 408576698