OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 2965 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2976 | 2976 |
2977 // Looks up the value associated with the given key. The undefined value is | 2977 // Looks up the value associated with the given key. The undefined value is |
2978 // returned in case the key is not present. | 2978 // returned in case the key is not present. |
2979 Object* Lookup(JSObject* key); | 2979 Object* Lookup(JSObject* key); |
2980 | 2980 |
2981 // Adds (or overwrites) the value associated with the given key. Mapping a | 2981 // Adds (or overwrites) the value associated with the given key. Mapping a |
2982 // key to the undefined value causes removal of the whole entry. | 2982 // key to the undefined value causes removal of the whole entry. |
2983 MUST_USE_RESULT MaybeObject* Put(JSObject* key, Object* value); | 2983 MUST_USE_RESULT MaybeObject* Put(JSObject* key, Object* value); |
2984 | 2984 |
2985 private: | 2985 private: |
| 2986 friend class MarkCompactCollector; |
| 2987 |
2986 void AddEntry(int entry, JSObject* key, Object* value); | 2988 void AddEntry(int entry, JSObject* key, Object* value); |
2987 void RemoveEntry(int entry); | 2989 void RemoveEntry(int entry, Heap* heap); |
| 2990 inline void RemoveEntry(int entry); |
| 2991 |
| 2992 // Returns the index to the value of an entry. |
| 2993 static inline int EntryToValueIndex(int entry) { |
| 2994 return EntryToIndex(entry) + 1; |
| 2995 } |
2988 }; | 2996 }; |
2989 | 2997 |
2990 | 2998 |
2991 // JSFunctionResultCache caches results of some JSFunction invocation. | 2999 // JSFunctionResultCache caches results of some JSFunction invocation. |
2992 // It is a fixed array with fixed structure: | 3000 // It is a fixed array with fixed structure: |
2993 // [0]: factory function | 3001 // [0]: factory function |
2994 // [1]: finger index | 3002 // [1]: finger index |
2995 // [2]: current cache size | 3003 // [2]: current cache size |
2996 // [3]: dummy field. | 3004 // [3]: dummy field. |
2997 // The rest of array are key/value pairs. | 3005 // The rest of array are key/value pairs. |
(...skipping 3623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6621 DISALLOW_IMPLICIT_CONSTRUCTORS(JSFunctionProxy); | 6629 DISALLOW_IMPLICIT_CONSTRUCTORS(JSFunctionProxy); |
6622 }; | 6630 }; |
6623 | 6631 |
6624 | 6632 |
6625 // The JSWeakMap describes EcmaScript Harmony weak maps | 6633 // The JSWeakMap describes EcmaScript Harmony weak maps |
6626 class JSWeakMap: public JSObject { | 6634 class JSWeakMap: public JSObject { |
6627 public: | 6635 public: |
6628 // [table]: the backing hash table mapping keys to values. | 6636 // [table]: the backing hash table mapping keys to values. |
6629 DECL_ACCESSORS(table, ObjectHashTable) | 6637 DECL_ACCESSORS(table, ObjectHashTable) |
6630 | 6638 |
| 6639 // [next]: linked list of encountered weak maps during GC. |
| 6640 DECL_ACCESSORS(next, Object) |
| 6641 |
| 6642 // Unchecked accessors to be used during GC. |
| 6643 inline ObjectHashTable* unchecked_table(); |
| 6644 |
6631 // Casting. | 6645 // Casting. |
6632 static inline JSWeakMap* cast(Object* obj); | 6646 static inline JSWeakMap* cast(Object* obj); |
6633 | 6647 |
6634 #ifdef OBJECT_PRINT | 6648 #ifdef OBJECT_PRINT |
6635 inline void JSWeakMapPrint() { | 6649 inline void JSWeakMapPrint() { |
6636 JSWeakMapPrint(stdout); | 6650 JSWeakMapPrint(stdout); |
6637 } | 6651 } |
6638 void JSWeakMapPrint(FILE* out); | 6652 void JSWeakMapPrint(FILE* out); |
6639 #endif | 6653 #endif |
6640 #ifdef DEBUG | 6654 #ifdef DEBUG |
6641 void JSWeakMapVerify(); | 6655 void JSWeakMapVerify(); |
6642 #endif | 6656 #endif |
6643 | 6657 |
6644 static const int kTableOffset = JSObject::kHeaderSize; | 6658 static const int kTableOffset = JSObject::kHeaderSize; |
6645 static const int kSize = kTableOffset + kPointerSize; | 6659 static const int kNextOffset = kTableOffset + kPointerSize; |
| 6660 static const int kSize = kNextOffset + kPointerSize; |
6646 | 6661 |
6647 private: | 6662 private: |
6648 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakMap); | 6663 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakMap); |
6649 }; | 6664 }; |
6650 | 6665 |
6651 | 6666 |
6652 // Foreign describes objects pointing from JavaScript to C structures. | 6667 // Foreign describes objects pointing from JavaScript to C structures. |
6653 // Since they cannot contain references to JS HeapObjects they can be | 6668 // Since they cannot contain references to JS HeapObjects they can be |
6654 // placed in old_data_space. | 6669 // placed in old_data_space. |
6655 class Foreign: public HeapObject { | 6670 class Foreign: public HeapObject { |
(...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7285 } else { | 7300 } else { |
7286 value &= ~(1 << bit_position); | 7301 value &= ~(1 << bit_position); |
7287 } | 7302 } |
7288 return value; | 7303 return value; |
7289 } | 7304 } |
7290 }; | 7305 }; |
7291 | 7306 |
7292 } } // namespace v8::internal | 7307 } } // namespace v8::internal |
7293 | 7308 |
7294 #endif // V8_OBJECTS_H_ | 7309 #endif // V8_OBJECTS_H_ |
OLD | NEW |