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

Side by Side Diff: src/objects.h

Issue 3127016: Make instance_size immediately useful for all fixed size objects. (Closed)
Patch Set: Comment fix. Created 10 years, 4 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
« no previous file with comments | « src/heap.cc ('k') | src/objects.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-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 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 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 194
195 195
196 // PropertyNormalizationMode is used to specify whether to keep 196 // PropertyNormalizationMode is used to specify whether to keep
197 // inobject properties when normalizing properties of a JSObject. 197 // inobject properties when normalizing properties of a JSObject.
198 enum PropertyNormalizationMode { 198 enum PropertyNormalizationMode {
199 CLEAR_INOBJECT_PROPERTIES, 199 CLEAR_INOBJECT_PROPERTIES,
200 KEEP_INOBJECT_PROPERTIES 200 KEEP_INOBJECT_PROPERTIES
201 }; 201 };
202 202
203 203
204 // Instance size sentinel for objects of variable size.
205 static const int kVariableSizeSentinel = 0;
206
207
204 // All Maps have a field instance_type containing a InstanceType. 208 // All Maps have a field instance_type containing a InstanceType.
205 // It describes the type of the instances. 209 // It describes the type of the instances.
206 // 210 //
207 // As an example, a JavaScript object is a heap object and its map 211 // As an example, a JavaScript object is a heap object and its map
208 // instance_type is JS_OBJECT_TYPE. 212 // instance_type is JS_OBJECT_TYPE.
209 // 213 //
210 // The names of the string instance types are intended to systematically 214 // The names of the string instance types are intended to systematically
211 // mirror their encoding in the instance_type field of the map. The default 215 // mirror their encoding in the instance_type field of the map. The default
212 // encoding is considered TWO_BYTE. It is not mentioned in the name. ASCII 216 // encoding is considered TWO_BYTE. It is not mentioned in the name. ASCII
213 // encoding is mentioned explicitly in the name. Likewise, the default 217 // encoding is mentioned explicitly in the name. Likewise, the default
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 301
298 #define INSTANCE_TYPE_LIST(V) \ 302 #define INSTANCE_TYPE_LIST(V) \
299 INSTANCE_TYPE_LIST_ALL(V) \ 303 INSTANCE_TYPE_LIST_ALL(V) \
300 INSTANCE_TYPE_LIST_DEBUGGER(V) 304 INSTANCE_TYPE_LIST_DEBUGGER(V)
301 305
302 306
303 // Since string types are not consecutive, this macro is used to 307 // Since string types are not consecutive, this macro is used to
304 // iterate over them. 308 // iterate over them.
305 #define STRING_TYPE_LIST(V) \ 309 #define STRING_TYPE_LIST(V) \
306 V(SYMBOL_TYPE, \ 310 V(SYMBOL_TYPE, \
307 SeqTwoByteString::kAlignedSize, \ 311 kVariableSizeSentinel, \
308 symbol, \ 312 symbol, \
309 Symbol) \ 313 Symbol) \
310 V(ASCII_SYMBOL_TYPE, \ 314 V(ASCII_SYMBOL_TYPE, \
311 SeqAsciiString::kAlignedSize, \ 315 kVariableSizeSentinel, \
312 ascii_symbol, \ 316 ascii_symbol, \
313 AsciiSymbol) \ 317 AsciiSymbol) \
314 V(CONS_SYMBOL_TYPE, \ 318 V(CONS_SYMBOL_TYPE, \
315 ConsString::kSize, \ 319 ConsString::kSize, \
316 cons_symbol, \ 320 cons_symbol, \
317 ConsSymbol) \ 321 ConsSymbol) \
318 V(CONS_ASCII_SYMBOL_TYPE, \ 322 V(CONS_ASCII_SYMBOL_TYPE, \
319 ConsString::kSize, \ 323 ConsString::kSize, \
320 cons_ascii_symbol, \ 324 cons_ascii_symbol, \
321 ConsAsciiSymbol) \ 325 ConsAsciiSymbol) \
322 V(EXTERNAL_SYMBOL_TYPE, \ 326 V(EXTERNAL_SYMBOL_TYPE, \
323 ExternalTwoByteString::kSize, \ 327 ExternalTwoByteString::kSize, \
324 external_symbol, \ 328 external_symbol, \
325 ExternalSymbol) \ 329 ExternalSymbol) \
326 V(EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE, \ 330 V(EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE, \
327 ExternalTwoByteString::kSize, \ 331 ExternalTwoByteString::kSize, \
328 external_symbol_with_ascii_data, \ 332 external_symbol_with_ascii_data, \
329 ExternalSymbolWithAsciiData) \ 333 ExternalSymbolWithAsciiData) \
330 V(EXTERNAL_ASCII_SYMBOL_TYPE, \ 334 V(EXTERNAL_ASCII_SYMBOL_TYPE, \
331 ExternalAsciiString::kSize, \ 335 ExternalAsciiString::kSize, \
332 external_ascii_symbol, \ 336 external_ascii_symbol, \
333 ExternalAsciiSymbol) \ 337 ExternalAsciiSymbol) \
334 V(STRING_TYPE, \ 338 V(STRING_TYPE, \
335 SeqTwoByteString::kAlignedSize, \ 339 kVariableSizeSentinel, \
336 string, \ 340 string, \
337 String) \ 341 String) \
338 V(ASCII_STRING_TYPE, \ 342 V(ASCII_STRING_TYPE, \
339 SeqAsciiString::kAlignedSize, \ 343 kVariableSizeSentinel, \
340 ascii_string, \ 344 ascii_string, \
341 AsciiString) \ 345 AsciiString) \
342 V(CONS_STRING_TYPE, \ 346 V(CONS_STRING_TYPE, \
343 ConsString::kSize, \ 347 ConsString::kSize, \
344 cons_string, \ 348 cons_string, \
345 ConsString) \ 349 ConsString) \
346 V(CONS_ASCII_STRING_TYPE, \ 350 V(CONS_ASCII_STRING_TYPE, \
347 ConsString::kSize, \ 351 ConsString::kSize, \
348 cons_ascii_string, \ 352 cons_ascii_string, \
349 ConsAsciiString) \ 353 ConsAsciiString) \
350 V(EXTERNAL_STRING_TYPE, \ 354 V(EXTERNAL_STRING_TYPE, \
351 ExternalTwoByteString::kSize, \ 355 ExternalTwoByteString::kSize, \
352 external_string, \ 356 external_string, \
353 ExternalString) \ 357 ExternalString) \
354 V(EXTERNAL_STRING_WITH_ASCII_DATA_TYPE, \ 358 V(EXTERNAL_STRING_WITH_ASCII_DATA_TYPE, \
355 ExternalTwoByteString::kSize, \ 359 ExternalTwoByteString::kSize, \
356 external_string_with_ascii_data, \ 360 external_string_with_ascii_data, \
357 ExternalStringWithAsciiData) \ 361 ExternalStringWithAsciiData) \
358 V(EXTERNAL_ASCII_STRING_TYPE, \ 362 V(EXTERNAL_ASCII_STRING_TYPE, \
359 ExternalAsciiString::kSize, \ 363 ExternalAsciiString::kSize, \
360 external_ascii_string, \ 364 external_ascii_string, \
361 ExternalAsciiString) \ 365 ExternalAsciiString)
362 366
363 // A struct is a simple object a set of object-valued fields. Including an 367 // A struct is a simple object a set of object-valued fields. Including an
364 // object type in this causes the compiler to generate most of the boilerplate 368 // object type in this causes the compiler to generate most of the boilerplate
365 // code for the class including allocation and garbage collection routines, 369 // code for the class including allocation and garbage collection routines,
366 // casts and predicates. All you need to define is the class, methods and 370 // casts and predicates. All you need to define is the class, methods and
367 // object verification routines. Easy, no? 371 // object verification routines. Easy, no?
368 // 372 //
369 // Note that for subtle reasons related to the ordering or numerical values of 373 // Note that for subtle reasons related to the ordering or numerical values of
370 // type tags, elements in this list have to be added to the INSTANCE_TYPE_LIST 374 // type tags, elements in this list have to be added to the INSTANCE_TYPE_LIST
371 // manually. 375 // manually.
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 1097
1094 STATIC_CHECK(kMapOffset == Internals::kHeapObjectMapOffset); 1098 STATIC_CHECK(kMapOffset == Internals::kHeapObjectMapOffset);
1095 1099
1096 protected: 1100 protected:
1097 // helpers for calling an ObjectVisitor to iterate over pointers in the 1101 // helpers for calling an ObjectVisitor to iterate over pointers in the
1098 // half-open range [start, end) specified as integer offsets 1102 // half-open range [start, end) specified as integer offsets
1099 inline void IteratePointers(ObjectVisitor* v, int start, int end); 1103 inline void IteratePointers(ObjectVisitor* v, int start, int end);
1100 // as above, for the single element at "offset" 1104 // as above, for the single element at "offset"
1101 inline void IteratePointer(ObjectVisitor* v, int offset); 1105 inline void IteratePointer(ObjectVisitor* v, int offset);
1102 1106
1103 // Computes the object size from the map.
1104 // Should only be used from SizeFromMap.
1105 int SlowSizeFromMap(Map* map);
1106
1107 private: 1107 private:
1108 DISALLOW_IMPLICIT_CONSTRUCTORS(HeapObject); 1108 DISALLOW_IMPLICIT_CONSTRUCTORS(HeapObject);
1109 }; 1109 };
1110 1110
1111 1111
1112 #define SLOT_ADDR(obj, offset) \ 1112 #define SLOT_ADDR(obj, offset) \
1113 reinterpret_cast<Object**>((obj)->address() + offset) 1113 reinterpret_cast<Object**>((obj)->address() + offset)
1114 1114
1115 // This class describes a body of an object of a fixed size 1115 // This class describes a body of an object of a fixed size
1116 // in which all pointer fields are located in the [start_offset, end_offset) 1116 // in which all pointer fields are located in the [start_offset, end_offset)
(...skipping 1869 matching lines...) Expand 10 before | Expand all | Expand 10 after
2986 }; 2986 };
2987 2987
2988 2988
2989 // All heap objects have a Map that describes their structure. 2989 // All heap objects have a Map that describes their structure.
2990 // A Map contains information about: 2990 // A Map contains information about:
2991 // - Size information about the object 2991 // - Size information about the object
2992 // - How to iterate over an object (for garbage collection) 2992 // - How to iterate over an object (for garbage collection)
2993 class Map: public HeapObject { 2993 class Map: public HeapObject {
2994 public: 2994 public:
2995 // Instance size. 2995 // Instance size.
2996 // Size in bytes or kVariableSizeSentinel if instances do not have
2997 // a fixed size.
2996 inline int instance_size(); 2998 inline int instance_size();
2997 inline void set_instance_size(int value); 2999 inline void set_instance_size(int value);
2998 3000
2999 // Count of properties allocated in the object. 3001 // Count of properties allocated in the object.
3000 inline int inobject_properties(); 3002 inline int inobject_properties();
3001 inline void set_inobject_properties(int value); 3003 inline void set_inobject_properties(int value);
3002 3004
3003 // Count of property fields pre-allocated in the object when first allocated. 3005 // Count of property fields pre-allocated in the object when first allocated.
3004 inline int pre_allocated_property_fields(); 3006 inline int pre_allocated_property_fields();
3005 inline void set_pre_allocated_property_fields(int value); 3007 inline void set_pre_allocated_property_fields(int value);
(...skipping 2496 matching lines...) Expand 10 before | Expand all | Expand 10 after
5502 } else { 5504 } else {
5503 value &= ~(1 << bit_position); 5505 value &= ~(1 << bit_position);
5504 } 5506 }
5505 return value; 5507 return value;
5506 } 5508 }
5507 }; 5509 };
5508 5510
5509 } } // namespace v8::internal 5511 } } // namespace v8::internal
5510 5512
5511 #endif // V8_OBJECTS_H_ 5513 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/heap.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698