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

Side by Side Diff: src/objects.h

Issue 8098: - Added conditional write barrier to object accessors.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 12 years, 1 month 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/jsregexp.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-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 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 class TypeField: public BitField<PropertyType, 0, 3> {}; 159 class TypeField: public BitField<PropertyType, 0, 3> {};
160 class AttributesField: public BitField<PropertyAttributes, 3, 3> {}; 160 class AttributesField: public BitField<PropertyAttributes, 3, 3> {};
161 class IndexField: public BitField<uint32_t, 6, 32-6> {}; 161 class IndexField: public BitField<uint32_t, 6, 32-6> {};
162 162
163 static const int kInitialIndex = 1; 163 static const int kInitialIndex = 1;
164 164
165 private: 165 private:
166 uint32_t value_; 166 uint32_t value_;
167 }; 167 };
168 168
169 // Setter that skips the write barrier if mode is SKIP_WRITE_BARRIER.
170 enum WriteBarrierMode { SKIP_WRITE_BARRIER, UPDATE_WRITE_BARRIER };
171
169 // All Maps have a field instance_type containing a InstanceType. 172 // All Maps have a field instance_type containing a InstanceType.
170 // It describes the type of the instances. 173 // It describes the type of the instances.
171 // 174 //
172 // As an example, a JavaScript object is a heap object and its map 175 // As an example, a JavaScript object is a heap object and its map
173 // instance_type is JS_OBJECT_TYPE. 176 // instance_type is JS_OBJECT_TYPE.
174 // 177 //
175 // The names of the string instance types are intended to systematically 178 // The names of the string instance types are intended to systematically
176 // mirror their encoding in the instance_type field of the map. The length 179 // mirror their encoding in the instance_type field of the map. The length
177 // (SHORT, MEDIUM, or LONG) is always mentioned. The default encoding is 180 // (SHORT, MEDIUM, or LONG) is always mentioned. The default encoding is
178 // considered TWO_BYTE. It is not mentioned in the name. ASCII encoding is 181 // considered TWO_BYTE. It is not mentioned in the name. ASCII encoding is
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 551
549 NOT_EQUAL = GREATER 552 NOT_EQUAL = GREATER
550 }; 553 };
551 554
552 555
553 #define DECL_BOOLEAN_ACCESSORS(name) \ 556 #define DECL_BOOLEAN_ACCESSORS(name) \
554 inline bool name(); \ 557 inline bool name(); \
555 inline void set_##name(bool value); \ 558 inline void set_##name(bool value); \
556 559
557 560
558 #define DECL_ACCESSORS(name, type) \ 561 #define DECL_ACCESSORS(name, type) \
559 inline type* name(); \ 562 inline type* name(); \
560 inline void set_##name(type* value); 563 inline void set_##name(type* value, \
564 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); \
561 565
562 566
563 class StringStream; 567 class StringStream;
564 class ObjectVisitor; 568 class ObjectVisitor;
565 569
566 struct ValueInfo : public Malloced { 570 struct ValueInfo : public Malloced {
567 ValueInfo() : type(FIRST_TYPE), ptr(NULL), str(NULL), number(0) { } 571 ValueInfo() : type(FIRST_TYPE), ptr(NULL), str(NULL), number(0) { }
568 InstanceType type; 572 InstanceType type;
569 Object* ptr; 573 Object* ptr;
570 const char* str; 574 const char* str;
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 1038
1035 // Mutate this object's map pointer to remove the indication that the 1039 // Mutate this object's map pointer to remove the indication that the
1036 // object is overflowed (ie, partially restore the map pointer). 1040 // object is overflowed (ie, partially restore the map pointer).
1037 inline void ClearOverflow(); 1041 inline void ClearOverflow();
1038 1042
1039 static inline Object* GetHeapObjectField(HeapObject* obj, int index); 1043 static inline Object* GetHeapObjectField(HeapObject* obj, int index);
1040 1044
1041 // Casting. 1045 // Casting.
1042 static inline HeapObject* cast(Object* obj); 1046 static inline HeapObject* cast(Object* obj);
1043 1047
1048 // Return the write barrier mode for this.
1049 inline WriteBarrierMode GetWriteBarrierMode();
1050
1044 // Dispatched behavior. 1051 // Dispatched behavior.
1045 void HeapObjectShortPrint(StringStream* accumulator); 1052 void HeapObjectShortPrint(StringStream* accumulator);
1046 #ifdef DEBUG 1053 #ifdef DEBUG
1047 void HeapObjectPrint(); 1054 void HeapObjectPrint();
1048 void HeapObjectVerify(); 1055 void HeapObjectVerify();
1049 inline void VerifyObjectField(int offset); 1056 inline void VerifyObjectField(int offset);
1050 1057
1051 void PrintHeader(const char* id); 1058 void PrintHeader(const char* id);
1052 1059
1053 // Verify a pointer is a valid HeapObject pointer that points to object 1060 // Verify a pointer is a valid HeapObject pointer that points to object
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
1348 Object* NormalizeElements(); 1355 Object* NormalizeElements();
1349 1356
1350 // Transform slow named properties to fast variants. 1357 // Transform slow named properties to fast variants.
1351 // Returns failure if allocation failed. 1358 // Returns failure if allocation failed.
1352 Object* TransformToFastProperties(int unused_property_fields); 1359 Object* TransformToFastProperties(int unused_property_fields);
1353 1360
1354 // Access fast-case object properties at index. 1361 // Access fast-case object properties at index.
1355 inline Object* FastPropertyAt(int index); 1362 inline Object* FastPropertyAt(int index);
1356 inline Object* FastPropertyAtPut(int index, Object* value); 1363 inline Object* FastPropertyAtPut(int index, Object* value);
1357 1364
1365 // Access to set in object properties.
1366 inline Object* InObjectPropertyAtPut(int index,
1367 Object* value,
1368 WriteBarrierMode mode
1369 = UPDATE_WRITE_BARRIER);
1358 1370
1359 // initializes the body after properties slot, properties slot is 1371 // initializes the body after properties slot, properties slot is
1360 // initialized by set_properties 1372 // initialized by set_properties
1361 // Note: this call does not update write barrier, it is caller's 1373 // Note: this call does not update write barrier, it is caller's
1362 // reponsibility to ensure that *v* can be collected without WB here. 1374 // reponsibility to ensure that *v* can be collected without WB here.
1363 inline void InitializeBody(int object_size); 1375 inline void InitializeBody(int object_size);
1364 1376
1365 // Check whether this object references another object 1377 // Check whether this object references another object
1366 bool ReferencesObject(Object* obj); 1378 bool ReferencesObject(Object* obj);
1367 1379
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1472 // FixedArray describes fixed sized arrays where element 1484 // FixedArray describes fixed sized arrays where element
1473 // type is Object*. 1485 // type is Object*.
1474 1486
1475 class FixedArray: public Array { 1487 class FixedArray: public Array {
1476 public: 1488 public:
1477 1489
1478 // Setter and getter for elements. 1490 // Setter and getter for elements.
1479 inline Object* get(int index); 1491 inline Object* get(int index);
1480 inline void set(int index, Object* value); 1492 inline void set(int index, Object* value);
1481 1493
1494 // Setter with barrier mode.
1495 inline void set(int index, Object* value, WriteBarrierMode mode);
1496
1482 // Setters for frequently used oddballs located in old space. 1497 // Setters for frequently used oddballs located in old space.
1483 inline void set_undefined(int index); 1498 inline void set_undefined(int index);
1484 inline void set_null(int index); 1499 inline void set_null(int index);
1485 inline void set_the_hole(int index); 1500 inline void set_the_hole(int index);
1486 1501
1487 // Setter that skips the write barrier if mode is SKIP_WRITE_BARRIER.
1488 enum WriteBarrierMode { SKIP_WRITE_BARRIER, UPDATE_WRITE_BARRIER };
1489 inline void set(int index, Object* value, WriteBarrierMode mode);
1490 // Return the write barrier mode for this.
1491 inline WriteBarrierMode GetWriteBarrierMode();
1492
1493 // Copy operations. 1502 // Copy operations.
1494 inline Object* Copy(); 1503 inline Object* Copy();
1495 Object* CopySize(int new_length); 1504 Object* CopySize(int new_length);
1496 1505
1497 // Add the elements of a JSArray to this FixedArray. 1506 // Add the elements of a JSArray to this FixedArray.
1498 Object* AddKeysFromJSArray(JSArray* array); 1507 Object* AddKeysFromJSArray(JSArray* array);
1499 1508
1500 // Compute the union of this and other. 1509 // Compute the union of this and other.
1501 Object* UnionOfKeys(FixedArray* other); 1510 Object* UnionOfKeys(FixedArray* other);
1502 1511
(...skipping 2578 matching lines...) Expand 10 before | Expand all | Expand 10 after
4081 } else { 4090 } else {
4082 value &= ~(1 << bit_position); 4091 value &= ~(1 << bit_position);
4083 } 4092 }
4084 return value; 4093 return value;
4085 } 4094 }
4086 }; 4095 };
4087 4096
4088 } } // namespace v8::internal 4097 } } // namespace v8::internal
4089 4098
4090 #endif // V8_OBJECTS_H_ 4099 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/jsregexp.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698