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

Side by Side Diff: src/heap.h

Issue 10878047: Revert to code state of 3.13.1 plus r12350 (Closed) Base URL: https://v8.googlecode.com/svn/trunk
Patch Set: Created 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/handles.cc ('k') | src/heap.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 V(Oddball, the_hole_value, TheHoleValue) \ 57 V(Oddball, the_hole_value, TheHoleValue) \
58 V(Oddball, null_value, NullValue) \ 58 V(Oddball, null_value, NullValue) \
59 V(Oddball, true_value, TrueValue) \ 59 V(Oddball, true_value, TrueValue) \
60 V(Oddball, false_value, FalseValue) \ 60 V(Oddball, false_value, FalseValue) \
61 V(Map, global_property_cell_map, GlobalPropertyCellMap) \ 61 V(Map, global_property_cell_map, GlobalPropertyCellMap) \
62 V(Map, shared_function_info_map, SharedFunctionInfoMap) \ 62 V(Map, shared_function_info_map, SharedFunctionInfoMap) \
63 V(Map, meta_map, MetaMap) \ 63 V(Map, meta_map, MetaMap) \
64 V(Map, ascii_symbol_map, AsciiSymbolMap) \ 64 V(Map, ascii_symbol_map, AsciiSymbolMap) \
65 V(Map, ascii_string_map, AsciiStringMap) \ 65 V(Map, ascii_string_map, AsciiStringMap) \
66 V(Map, heap_number_map, HeapNumberMap) \ 66 V(Map, heap_number_map, HeapNumberMap) \
67 V(Map, native_context_map, NativeContextMap) \ 67 V(Map, global_context_map, GlobalContextMap) \
68 V(Map, fixed_array_map, FixedArrayMap) \ 68 V(Map, fixed_array_map, FixedArrayMap) \
69 V(Map, code_map, CodeMap) \ 69 V(Map, code_map, CodeMap) \
70 V(Map, scope_info_map, ScopeInfoMap) \ 70 V(Map, scope_info_map, ScopeInfoMap) \
71 V(Map, fixed_cow_array_map, FixedCOWArrayMap) \ 71 V(Map, fixed_cow_array_map, FixedCOWArrayMap) \
72 V(Map, fixed_double_array_map, FixedDoubleArrayMap) \ 72 V(Map, fixed_double_array_map, FixedDoubleArrayMap) \
73 V(Object, no_interceptor_result_sentinel, NoInterceptorResultSentinel) \ 73 V(Object, no_interceptor_result_sentinel, NoInterceptorResultSentinel) \
74 V(Map, hash_table_map, HashTableMap) \ 74 V(Map, hash_table_map, HashTableMap) \
75 V(FixedArray, empty_fixed_array, EmptyFixedArray) \ 75 V(FixedArray, empty_fixed_array, EmptyFixedArray) \
76 V(ByteArray, empty_byte_array, EmptyByteArray) \ 76 V(ByteArray, empty_byte_array, EmptyByteArray) \
77 V(String, empty_string, EmptyString) \ 77 V(String, empty_string, EmptyString) \
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 V(UnseededNumberDictionary, non_monomorphic_cache, NonMonomorphicCache) \ 143 V(UnseededNumberDictionary, non_monomorphic_cache, NonMonomorphicCache) \
144 V(PolymorphicCodeCache, polymorphic_code_cache, PolymorphicCodeCache) \ 144 V(PolymorphicCodeCache, polymorphic_code_cache, PolymorphicCodeCache) \
145 V(Code, js_entry_code, JsEntryCode) \ 145 V(Code, js_entry_code, JsEntryCode) \
146 V(Code, js_construct_entry_code, JsConstructEntryCode) \ 146 V(Code, js_construct_entry_code, JsConstructEntryCode) \
147 V(FixedArray, natives_source_cache, NativesSourceCache) \ 147 V(FixedArray, natives_source_cache, NativesSourceCache) \
148 V(Object, last_script_id, LastScriptId) \ 148 V(Object, last_script_id, LastScriptId) \
149 V(Script, empty_script, EmptyScript) \ 149 V(Script, empty_script, EmptyScript) \
150 V(Smi, real_stack_limit, RealStackLimit) \ 150 V(Smi, real_stack_limit, RealStackLimit) \
151 V(StringDictionary, intrinsic_function_names, IntrinsicFunctionNames) \ 151 V(StringDictionary, intrinsic_function_names, IntrinsicFunctionNames) \
152 V(Smi, arguments_adaptor_deopt_pc_offset, ArgumentsAdaptorDeoptPCOffset) \ 152 V(Smi, arguments_adaptor_deopt_pc_offset, ArgumentsAdaptorDeoptPCOffset) \
153 V(Smi, construct_stub_deopt_pc_offset, ConstructStubDeoptPCOffset) \ 153 V(Smi, construct_stub_deopt_pc_offset, ConstructStubDeoptPCOffset)
154 V(Smi, setter_stub_deopt_pc_offset, SetterStubDeoptPCOffset)
155 154
156 #define ROOT_LIST(V) \ 155 #define ROOT_LIST(V) \
157 STRONG_ROOT_LIST(V) \ 156 STRONG_ROOT_LIST(V) \
158 V(SymbolTable, symbol_table, SymbolTable) 157 V(SymbolTable, symbol_table, SymbolTable)
159 158
160 #define SYMBOL_LIST(V) \ 159 #define SYMBOL_LIST(V) \
161 V(Array_symbol, "Array") \ 160 V(Array_symbol, "Array") \
162 V(Object_symbol, "Object") \ 161 V(Object_symbol, "Object") \
163 V(Proto_symbol, "__proto__") \ 162 V(Proto_symbol, "__proto__") \
164 V(StringImpl_symbol, "StringImpl") \ 163 V(StringImpl_symbol, "StringImpl") \
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 // Please note this does not perform a garbage collection. 815 // Please note this does not perform a garbage collection.
817 MUST_USE_RESULT MaybeObject* AllocateFixedDoubleArrayWithHoles( 816 MUST_USE_RESULT MaybeObject* AllocateFixedDoubleArrayWithHoles(
818 int length, 817 int length,
819 PretenureFlag pretenure = NOT_TENURED); 818 PretenureFlag pretenure = NOT_TENURED);
820 819
821 // AllocateHashTable is identical to AllocateFixedArray except 820 // AllocateHashTable is identical to AllocateFixedArray except
822 // that the resulting object has hash_table_map as map. 821 // that the resulting object has hash_table_map as map.
823 MUST_USE_RESULT MaybeObject* AllocateHashTable( 822 MUST_USE_RESULT MaybeObject* AllocateHashTable(
824 int length, PretenureFlag pretenure = NOT_TENURED); 823 int length, PretenureFlag pretenure = NOT_TENURED);
825 824
826 // Allocate a native (but otherwise uninitialized) context. 825 // Allocate a global (but otherwise uninitialized) context.
827 MUST_USE_RESULT MaybeObject* AllocateNativeContext(); 826 MUST_USE_RESULT MaybeObject* AllocateGlobalContext();
828 827
829 // Allocate a module context. 828 // Allocate a module context.
830 MUST_USE_RESULT MaybeObject* AllocateModuleContext(ScopeInfo* scope_info); 829 MUST_USE_RESULT MaybeObject* AllocateModuleContext(ScopeInfo* scope_info);
831 830
832 // Allocate a function context. 831 // Allocate a function context.
833 MUST_USE_RESULT MaybeObject* AllocateFunctionContext(int length, 832 MUST_USE_RESULT MaybeObject* AllocateFunctionContext(int length,
834 JSFunction* function); 833 JSFunction* function);
835 834
836 // Allocate a catch context. 835 // Allocate a catch context.
837 MUST_USE_RESULT MaybeObject* AllocateCatchContext(JSFunction* function, 836 MUST_USE_RESULT MaybeObject* AllocateCatchContext(JSFunction* function,
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1067 void CollectAllAvailableGarbage(const char* gc_reason = NULL); 1066 void CollectAllAvailableGarbage(const char* gc_reason = NULL);
1068 1067
1069 // Check whether the heap is currently iterable. 1068 // Check whether the heap is currently iterable.
1070 bool IsHeapIterable(); 1069 bool IsHeapIterable();
1071 1070
1072 // Ensure that we have swept all spaces in such a way that we can iterate 1071 // Ensure that we have swept all spaces in such a way that we can iterate
1073 // over all objects. May cause a GC. 1072 // over all objects. May cause a GC.
1074 void EnsureHeapIsIterable(); 1073 void EnsureHeapIsIterable();
1075 1074
1076 // Notify the heap that a context has been disposed. 1075 // Notify the heap that a context has been disposed.
1077 int NotifyContextDisposed() { 1076 int NotifyContextDisposed() { return ++contexts_disposed_; }
1078 flush_monomorphic_ics_ = true;
1079 return ++contexts_disposed_;
1080 }
1081 1077
1082 // Utility to invoke the scavenger. This is needed in test code to 1078 // Utility to invoke the scavenger. This is needed in test code to
1083 // ensure correct callback for weak global handles. 1079 // ensure correct callback for weak global handles.
1084 void PerformScavenge(); 1080 void PerformScavenge();
1085 1081
1086 inline void increment_scan_on_scavenge_pages() { 1082 inline void increment_scan_on_scavenge_pages() {
1087 scan_on_scavenge_pages_++; 1083 scan_on_scavenge_pages_++;
1088 if (FLAG_gc_verbose) { 1084 if (FLAG_gc_verbose) {
1089 PrintF("Scan-on-scavenge pages: %d\n", scan_on_scavenge_pages_); 1085 PrintF("Scan-on-scavenge pages: %d\n", scan_on_scavenge_pages_);
1090 } 1086 }
1091 } 1087 }
1092 1088
1093 inline void decrement_scan_on_scavenge_pages() { 1089 inline void decrement_scan_on_scavenge_pages() {
1094 scan_on_scavenge_pages_--; 1090 scan_on_scavenge_pages_--;
1095 if (FLAG_gc_verbose) { 1091 if (FLAG_gc_verbose) {
1096 PrintF("Scan-on-scavenge pages: %d\n", scan_on_scavenge_pages_); 1092 PrintF("Scan-on-scavenge pages: %d\n", scan_on_scavenge_pages_);
1097 } 1093 }
1098 } 1094 }
1099 1095
1100 PromotionQueue* promotion_queue() { return &promotion_queue_; } 1096 PromotionQueue* promotion_queue() { return &promotion_queue_; }
1101 1097
1102 #ifdef DEBUG 1098 #ifdef DEBUG
1103 // Utility used with flag gc-greedy. 1099 // Utility used with flag gc-greedy.
1104 void GarbageCollectionGreedyCheck(); 1100 void GarbageCollectionGreedyCheck();
1105 #endif 1101 #endif
1106 1102
1107 void AddGCPrologueCallback( 1103 void AddGCPrologueCallback(
1108 GCPrologueCallback callback, GCType gc_type_filter); 1104 GCEpilogueCallback callback, GCType gc_type_filter);
1109 void RemoveGCPrologueCallback(GCPrologueCallback callback); 1105 void RemoveGCPrologueCallback(GCEpilogueCallback callback);
1110 1106
1111 void AddGCEpilogueCallback( 1107 void AddGCEpilogueCallback(
1112 GCEpilogueCallback callback, GCType gc_type_filter); 1108 GCEpilogueCallback callback, GCType gc_type_filter);
1113 void RemoveGCEpilogueCallback(GCEpilogueCallback callback); 1109 void RemoveGCEpilogueCallback(GCEpilogueCallback callback);
1114 1110
1115 void SetGlobalGCPrologueCallback(GCCallback callback) { 1111 void SetGlobalGCPrologueCallback(GCCallback callback) {
1116 ASSERT((callback == NULL) ^ (global_gc_prologue_callback_ == NULL)); 1112 ASSERT((callback == NULL) ^ (global_gc_prologue_callback_ == NULL));
1117 global_gc_prologue_callback_ = callback; 1113 global_gc_prologue_callback_ = callback;
1118 } 1114 }
1119 void SetGlobalGCEpilogueCallback(GCCallback callback) { 1115 void SetGlobalGCEpilogueCallback(GCCallback callback) {
(...skipping 26 matching lines...) Expand all
1146 #define SYMBOL_ACCESSOR(name, str) String* name() { \ 1142 #define SYMBOL_ACCESSOR(name, str) String* name() { \
1147 return String::cast(roots_[k##name##RootIndex]); \ 1143 return String::cast(roots_[k##name##RootIndex]); \
1148 } 1144 }
1149 SYMBOL_LIST(SYMBOL_ACCESSOR) 1145 SYMBOL_LIST(SYMBOL_ACCESSOR)
1150 #undef SYMBOL_ACCESSOR 1146 #undef SYMBOL_ACCESSOR
1151 1147
1152 // The hidden_symbol is special because it is the empty string, but does 1148 // The hidden_symbol is special because it is the empty string, but does
1153 // not match the empty string. 1149 // not match the empty string.
1154 String* hidden_symbol() { return hidden_symbol_; } 1150 String* hidden_symbol() { return hidden_symbol_; }
1155 1151
1156 void set_native_contexts_list(Object* object) { 1152 void set_global_contexts_list(Object* object) {
1157 native_contexts_list_ = object; 1153 global_contexts_list_ = object;
1158 } 1154 }
1159 Object* native_contexts_list() { return native_contexts_list_; } 1155 Object* global_contexts_list() { return global_contexts_list_; }
1160 1156
1161 // Number of mark-sweeps. 1157 // Number of mark-sweeps.
1162 unsigned int ms_count() { return ms_count_; } 1158 unsigned int ms_count() { return ms_count_; }
1163 1159
1164 // Iterates over all roots in the heap. 1160 // Iterates over all roots in the heap.
1165 void IterateRoots(ObjectVisitor* v, VisitMode mode); 1161 void IterateRoots(ObjectVisitor* v, VisitMode mode);
1166 // Iterates over all strong roots in the heap. 1162 // Iterates over all strong roots in the heap.
1167 void IterateStrongRoots(ObjectVisitor* v, VisitMode mode); 1163 void IterateStrongRoots(ObjectVisitor* v, VisitMode mode);
1168 // Iterates over all the other roots in the heap. 1164 // Iterates over all the other roots in the heap.
1169 void IterateWeakRoots(ObjectVisitor* v, VisitMode mode); 1165 void IterateWeakRoots(ObjectVisitor* v, VisitMode mode);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 // Update the next script id. 1219 // Update the next script id.
1224 inline void SetLastScriptId(Object* last_script_id); 1220 inline void SetLastScriptId(Object* last_script_id);
1225 1221
1226 // Generated code can embed this address to get access to the roots. 1222 // Generated code can embed this address to get access to the roots.
1227 Object** roots_array_start() { return roots_; } 1223 Object** roots_array_start() { return roots_; }
1228 1224
1229 Address* store_buffer_top_address() { 1225 Address* store_buffer_top_address() {
1230 return reinterpret_cast<Address*>(&roots_[kStoreBufferTopRootIndex]); 1226 return reinterpret_cast<Address*>(&roots_[kStoreBufferTopRootIndex]);
1231 } 1227 }
1232 1228
1233 // Get address of native contexts list for serialization support. 1229 // Get address of global contexts list for serialization support.
1234 Object** native_contexts_list_address() { 1230 Object** global_contexts_list_address() {
1235 return &native_contexts_list_; 1231 return &global_contexts_list_;
1236 } 1232 }
1237 1233
1238 #ifdef DEBUG 1234 #ifdef DEBUG
1239 void Print(); 1235 void Print();
1240 void PrintHandles(); 1236 void PrintHandles();
1241 1237
1242 // Verify the heap is in its normal state before or after a GC. 1238 // Verify the heap is in its normal state before or after a GC.
1243 void Verify(); 1239 void Verify();
1244 1240
1245 void OldPointerSpaceCheckStoreBuffer(); 1241 void OldPointerSpaceCheckStoreBuffer();
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
1582 void SetArgumentsAdaptorDeoptPCOffset(int pc_offset) { 1578 void SetArgumentsAdaptorDeoptPCOffset(int pc_offset) {
1583 ASSERT(arguments_adaptor_deopt_pc_offset() == Smi::FromInt(0)); 1579 ASSERT(arguments_adaptor_deopt_pc_offset() == Smi::FromInt(0));
1584 set_arguments_adaptor_deopt_pc_offset(Smi::FromInt(pc_offset)); 1580 set_arguments_adaptor_deopt_pc_offset(Smi::FromInt(pc_offset));
1585 } 1581 }
1586 1582
1587 void SetConstructStubDeoptPCOffset(int pc_offset) { 1583 void SetConstructStubDeoptPCOffset(int pc_offset) {
1588 ASSERT(construct_stub_deopt_pc_offset() == Smi::FromInt(0)); 1584 ASSERT(construct_stub_deopt_pc_offset() == Smi::FromInt(0));
1589 set_construct_stub_deopt_pc_offset(Smi::FromInt(pc_offset)); 1585 set_construct_stub_deopt_pc_offset(Smi::FromInt(pc_offset));
1590 } 1586 }
1591 1587
1592 void SetSetterStubDeoptPCOffset(int pc_offset) {
1593 ASSERT(setter_stub_deopt_pc_offset() == Smi::FromInt(0));
1594 set_setter_stub_deopt_pc_offset(Smi::FromInt(pc_offset));
1595 }
1596
1597 // For post mortem debugging. 1588 // For post mortem debugging.
1598 void RememberUnmappedPage(Address page, bool compacted); 1589 void RememberUnmappedPage(Address page, bool compacted);
1599 1590
1600 // Global inline caching age: it is incremented on some GCs after context 1591 // Global inline caching age: it is incremented on some GCs after context
1601 // disposal. We use it to flush inline caches. 1592 // disposal. We use it to flush inline caches.
1602 int global_ic_age() { 1593 int global_ic_age() {
1603 return global_ic_age_; 1594 return global_ic_age_;
1604 } 1595 }
1605 1596
1606 void AgeInlineCaches() { 1597 void AgeInlineCaches() {
1607 global_ic_age_ = (global_ic_age_ + 1) & SharedFunctionInfo::ICAgeBits::kMax; 1598 global_ic_age_ = (global_ic_age_ + 1) & SharedFunctionInfo::ICAgeBits::kMax;
1608 } 1599 }
1609 1600
1610 bool flush_monomorphic_ics() { return flush_monomorphic_ics_; }
1611
1612 intptr_t amount_of_external_allocated_memory() { 1601 intptr_t amount_of_external_allocated_memory() {
1613 return amount_of_external_allocated_memory_; 1602 return amount_of_external_allocated_memory_;
1614 } 1603 }
1615 1604
1616 // ObjectStats are kept in two arrays, counts and sizes. Related stats are 1605 // ObjectStats are kept in two arrays, counts and sizes. Related stats are
1617 // stored in a contiguous linear buffer. Stats groups are stored one after 1606 // stored in a contiguous linear buffer. Stats groups are stored one after
1618 // another. 1607 // another.
1619 enum { 1608 enum {
1620 FIRST_CODE_KIND_SUB_TYPE = LAST_TYPE + 1, 1609 FIRST_CODE_KIND_SUB_TYPE = LAST_TYPE + 1,
1621 FIRST_FIXED_ARRAY_SUB_TYPE = 1610 FIRST_FIXED_ARRAY_SUB_TYPE =
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1687 int sweep_generation_; 1676 int sweep_generation_;
1688 1677
1689 int always_allocate_scope_depth_; 1678 int always_allocate_scope_depth_;
1690 int linear_allocation_scope_depth_; 1679 int linear_allocation_scope_depth_;
1691 1680
1692 // For keeping track of context disposals. 1681 // For keeping track of context disposals.
1693 int contexts_disposed_; 1682 int contexts_disposed_;
1694 1683
1695 int global_ic_age_; 1684 int global_ic_age_;
1696 1685
1697 bool flush_monomorphic_ics_;
1698
1699 int scan_on_scavenge_pages_; 1686 int scan_on_scavenge_pages_;
1700 1687
1701 #if defined(V8_TARGET_ARCH_X64) 1688 #if defined(V8_TARGET_ARCH_X64)
1702 static const int kMaxObjectSizeInNewSpace = 1024*KB; 1689 static const int kMaxObjectSizeInNewSpace = 1024*KB;
1703 #else 1690 #else
1704 static const int kMaxObjectSizeInNewSpace = 512*KB; 1691 static const int kMaxObjectSizeInNewSpace = 512*KB;
1705 #endif 1692 #endif
1706 1693
1707 NewSpace new_space_; 1694 NewSpace new_space_;
1708 OldSpace* old_pointer_space_; 1695 OldSpace* old_pointer_space_;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1782 // by global handles 1769 // by global handles
1783 intptr_t amount_of_external_allocated_memory_; 1770 intptr_t amount_of_external_allocated_memory_;
1784 1771
1785 // Caches the amount of external memory registered at the last global gc. 1772 // Caches the amount of external memory registered at the last global gc.
1786 intptr_t amount_of_external_allocated_memory_at_last_global_gc_; 1773 intptr_t amount_of_external_allocated_memory_at_last_global_gc_;
1787 1774
1788 // Indicates that an allocation has failed in the old generation since the 1775 // Indicates that an allocation has failed in the old generation since the
1789 // last GC. 1776 // last GC.
1790 int old_gen_exhausted_; 1777 int old_gen_exhausted_;
1791 1778
1792 Object* native_contexts_list_; 1779 Object* global_contexts_list_;
1793 1780
1794 StoreBufferRebuilder store_buffer_rebuilder_; 1781 StoreBufferRebuilder store_buffer_rebuilder_;
1795 1782
1796 struct StringTypeTable { 1783 struct StringTypeTable {
1797 InstanceType type; 1784 InstanceType type;
1798 int size; 1785 int size;
1799 RootListIndex index; 1786 RootListIndex index;
1800 }; 1787 };
1801 1788
1802 struct ConstantSymbolTable { 1789 struct ConstantSymbolTable {
(...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after
2786 AssertNoAllocation no_alloc; // i.e. no gc allowed. 2773 AssertNoAllocation no_alloc; // i.e. no gc allowed.
2787 2774
2788 private: 2775 private:
2789 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); 2776 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer);
2790 }; 2777 };
2791 #endif // DEBUG || LIVE_OBJECT_LIST 2778 #endif // DEBUG || LIVE_OBJECT_LIST
2792 2779
2793 } } // namespace v8::internal 2780 } } // namespace v8::internal
2794 2781
2795 #endif // V8_HEAP_H_ 2782 #endif // V8_HEAP_H_
OLDNEW
« no previous file with comments | « src/handles.cc ('k') | src/heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698