Index: src/objects.h |
=================================================================== |
--- src/objects.h (revision 2708) |
+++ src/objects.h (working copy) |
@@ -2704,6 +2704,10 @@ |
inline int inobject_properties(); |
inline void set_inobject_properties(int value); |
+ // Count of property fields pre-allocated in the object when first allocated. |
+ inline int pre_allocated_property_fields(); |
+ inline void set_pre_allocated_property_fields(int value); |
+ |
// Instance type. |
inline InstanceType instance_type(); |
inline void set_instance_type(InstanceType value); |
@@ -2869,6 +2873,8 @@ |
void MapVerify(); |
#endif |
+ static const int kMaxPreAllocatedPropertyFields = 255; |
+ |
// Layout description. |
static const int kInstanceSizesOffset = HeapObject::kHeaderSize; |
static const int kInstanceAttributesOffset = kInstanceSizesOffset + kIntSize; |
@@ -2882,7 +2888,8 @@ |
// Byte offsets within kInstanceSizesOffset. |
static const int kInstanceSizeOffset = kInstanceSizesOffset + 0; |
static const int kInObjectPropertiesOffset = kInstanceSizesOffset + 1; |
- // The bytes at positions 2 and 3 are not in use at the moment. |
+ static const int kPreAllocatedPropertyFieldsOffset = kInstanceSizesOffset + 2; |
+ // The byte at position 3 is not in use at the moment. |
// Byte offsets within kInstanceAttributesOffset attributes. |
static const int kInstanceTypeOffset = kInstanceAttributesOffset + 0; |
@@ -3090,10 +3097,42 @@ |
inline bool is_toplevel(); |
inline void set_is_toplevel(bool value); |
+ // Bit field containing various information collected by the compiler to |
+ // drive optimization. |
+ inline int compiler_hints(); |
+ inline void set_compiler_hints(int value); |
+ |
+ // Add information on assignments of the form this.x = ...; |
+ void SetThisPropertyAssignmentsInfo( |
+ bool has_only_this_property_assignments, |
+ bool has_only_simple_this_property_assignments, |
+ FixedArray* this_property_assignments); |
+ |
+ // Indicate that this function only consists of assignments of the form |
+ // this.x = ...;. |
+ inline bool has_only_this_property_assignments(); |
+ |
+ // Indicate that this function only consists of assignments of the form |
+ // this.x = y; where y is either a constant or refers to an argument. |
+ inline bool has_only_simple_this_property_assignments(); |
+ |
+ // For functions which only contains this property assignments this provides |
+ // access to the names for the properties assigned. |
+ DECL_ACCESSORS(this_property_assignments, Object) |
+ inline int this_property_assignments_count(); |
+ inline void set_this_property_assignments_count(int value); |
+ String* GetThisPropertyAssignmentName(int index); |
+ |
// [source code]: Source code for the function. |
bool HasSourceCode(); |
Object* GetSourceCode(); |
+ // Calculate the instance size. |
+ int CalculateInstanceSize(); |
+ |
+ // Calculate the number of in-object properties. |
+ int CalculateInObjectProperties(); |
+ |
// Dispatched behavior. |
void SharedFunctionInfoIterateBody(ObjectVisitor* v); |
// Set max_length to -1 for unlimited length. |
@@ -3129,7 +3168,12 @@ |
static const int kScriptOffset = kExternalReferenceDataOffset + kPointerSize; |
static const int kDebugInfoOffset = kScriptOffset + kPointerSize; |
static const int kInferredNameOffset = kDebugInfoOffset + kPointerSize; |
- static const int kSize = kInferredNameOffset + kPointerSize; |
+ static const int kCompilerHintsOffset = kInferredNameOffset + kPointerSize; |
+ static const int kThisPropertyAssignmentsOffset = |
+ kCompilerHintsOffset + kPointerSize; |
+ static const int kThisPropertyAssignmentsCountOffset = |
+ kThisPropertyAssignmentsOffset + kPointerSize; |
+ static const int kSize = kThisPropertyAssignmentsCountOffset + kPointerSize; |
private: |
// Bit positions in length_and_flg. |
@@ -3146,6 +3190,10 @@ |
static const int kStartPositionShift = 2; |
static const int kStartPositionMask = ~((1 << kStartPositionShift) - 1); |
+ // Bit positions in compiler_hints. |
+ static const int kHasOnlyThisPropertyAssignments = 0; |
+ static const int kHasOnlySimpleThisPropertyAssignments = 1; |
+ |
DISALLOW_IMPLICIT_CONSTRUCTORS(SharedFunctionInfo); |
}; |