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

Side by Side Diff: src/objects.h

Issue 10448097: Revert r11681 https://chromiumcodereview.appspot.com/10448011 (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 8 years, 6 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 | « no previous file | 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 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 1565 matching lines...) Expand 10 before | Expand all | Expand 10 after
1576 PropertyDetails details); 1576 PropertyDetails details);
1577 1577
1578 MUST_USE_RESULT MaybeObject* SetNormalizedProperty(String* name, 1578 MUST_USE_RESULT MaybeObject* SetNormalizedProperty(String* name,
1579 Object* value, 1579 Object* value,
1580 PropertyDetails details); 1580 PropertyDetails details);
1581 1581
1582 // Deletes the named property in a normalized object. 1582 // Deletes the named property in a normalized object.
1583 MUST_USE_RESULT MaybeObject* DeleteNormalizedProperty(String* name, 1583 MUST_USE_RESULT MaybeObject* DeleteNormalizedProperty(String* name,
1584 DeleteMode mode); 1584 DeleteMode mode);
1585 1585
1586 MUST_USE_RESULT MaybeObject* OptimizeAsPrototype();
1587
1588 // Retrieve interceptors. 1586 // Retrieve interceptors.
1589 InterceptorInfo* GetNamedInterceptor(); 1587 InterceptorInfo* GetNamedInterceptor();
1590 InterceptorInfo* GetIndexedInterceptor(); 1588 InterceptorInfo* GetIndexedInterceptor();
1591 1589
1592 // Used from JSReceiver. 1590 // Used from JSReceiver.
1593 PropertyAttributes GetPropertyAttributePostInterceptor(JSObject* receiver, 1591 PropertyAttributes GetPropertyAttributePostInterceptor(JSObject* receiver,
1594 String* name, 1592 String* name,
1595 bool continue_search); 1593 bool continue_search);
1596 PropertyAttributes GetPropertyAttributeWithInterceptor(JSObject* receiver, 1594 PropertyAttributes GetPropertyAttributeWithInterceptor(JSObject* receiver,
1597 String* name, 1595 String* name,
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
2048 int number_of_slow_unused_elements_; 2046 int number_of_slow_unused_elements_;
2049 }; 2047 };
2050 2048
2051 void IncrementSpillStatistics(SpillInformation* info); 2049 void IncrementSpillStatistics(SpillInformation* info);
2052 #endif 2050 #endif
2053 Object* SlowReverseLookup(Object* value); 2051 Object* SlowReverseLookup(Object* value);
2054 2052
2055 // Maximal number of fast properties for the JSObject. Used to 2053 // Maximal number of fast properties for the JSObject. Used to
2056 // restrict the number of map transitions to avoid an explosion in 2054 // restrict the number of map transitions to avoid an explosion in
2057 // the number of maps for objects used as dictionaries. 2055 // the number of maps for objects used as dictionaries.
2058 inline bool TooManyFastProperties(int properties); 2056 inline int MaxFastProperties();
2059 2057
2060 // Maximal number of elements (numbered 0 .. kMaxElementCount - 1). 2058 // Maximal number of elements (numbered 0 .. kMaxElementCount - 1).
2061 // Also maximal value of JSArray's length property. 2059 // Also maximal value of JSArray's length property.
2062 static const uint32_t kMaxElementCount = 0xffffffffu; 2060 static const uint32_t kMaxElementCount = 0xffffffffu;
2063 2061
2064 // Constants for heuristics controlling conversion of fast elements 2062 // Constants for heuristics controlling conversion of fast elements
2065 // to slow elements. 2063 // to slow elements.
2066 2064
2067 // Maximal gap that can be introduced by adding an element beyond 2065 // Maximal gap that can be introduced by adding an element beyond
2068 // the current elements length. 2066 // the current elements length.
2069 static const uint32_t kMaxGap = 1024; 2067 static const uint32_t kMaxGap = 1024;
2070 2068
2071 // Maximal length of fast elements array that won't be checked for 2069 // Maximal length of fast elements array that won't be checked for
2072 // being dense enough on expansion. 2070 // being dense enough on expansion.
2073 static const int kMaxUncheckedFastElementsLength = 5000; 2071 static const int kMaxUncheckedFastElementsLength = 5000;
2074 2072
2075 // Same as above but for old arrays. This limit is more strict. We 2073 // Same as above but for old arrays. This limit is more strict. We
2076 // don't want to be wasteful with long lived objects. 2074 // don't want to be wasteful with long lived objects.
2077 static const int kMaxUncheckedOldFastElementsLength = 500; 2075 static const int kMaxUncheckedOldFastElementsLength = 500;
2078 2076
2079 static const int kInitialMaxFastElementArray = 100000; 2077 static const int kInitialMaxFastElementArray = 100000;
2080 static const int kFastPropertiesSoftLimit = 12; 2078 static const int kMaxFastProperties = 12;
2081 static const int kMaxFastProperties = 32;
2082 static const int kMaxInstanceSize = 255 * kPointerSize; 2079 static const int kMaxInstanceSize = 255 * kPointerSize;
2083 // When extending the backing storage for property values, we increase 2080 // When extending the backing storage for property values, we increase
2084 // its size by more than the 1 entry necessary, so sequentially adding fields 2081 // its size by more than the 1 entry necessary, so sequentially adding fields
2085 // to the same object requires fewer allocations and copies. 2082 // to the same object requires fewer allocations and copies.
2086 static const int kFieldsAdded = 3; 2083 static const int kFieldsAdded = 3;
2087 2084
2088 // Layout description. 2085 // Layout description.
2089 static const int kPropertiesOffset = HeapObject::kHeaderSize; 2086 static const int kPropertiesOffset = HeapObject::kHeaderSize;
2090 static const int kElementsOffset = kPropertiesOffset + kPointerSize; 2087 static const int kElementsOffset = kPropertiesOffset + kPointerSize;
2091 static const int kHeaderSize = kElementsOffset + kPointerSize; 2088 static const int kHeaderSize = kElementsOffset + kPointerSize;
(...skipping 2579 matching lines...) Expand 10 before | Expand all | Expand 10 after
4671 // Tells whether the map is attached to SharedFunctionInfo 4668 // Tells whether the map is attached to SharedFunctionInfo
4672 // (for inobject slack tracking). 4669 // (for inobject slack tracking).
4673 inline void set_attached_to_shared_function_info(bool value); 4670 inline void set_attached_to_shared_function_info(bool value);
4674 4671
4675 inline bool attached_to_shared_function_info(); 4672 inline bool attached_to_shared_function_info();
4676 4673
4677 // Tells whether the map is shared between objects that may have different 4674 // Tells whether the map is shared between objects that may have different
4678 // behavior. If true, the map should never be modified, instead a clone 4675 // behavior. If true, the map should never be modified, instead a clone
4679 // should be created and modified. 4676 // should be created and modified.
4680 inline void set_is_shared(bool value); 4677 inline void set_is_shared(bool value);
4678
4681 inline bool is_shared(); 4679 inline bool is_shared();
4682 4680
4683 // Tells whether the map is used for an object that is a prototype for another
4684 // object or is the prototype on a function. Such maps are made faster by
4685 // tweaking the heuristics that distinguish between regular object-oriented
4686 // objects and the objects that are being used as hash maps. This flag is
4687 // for optimization, not correctness.
4688 inline void set_used_for_prototype(bool value);
4689 inline bool used_for_prototype();
4690
4691 // Tells whether the instance needs security checks when accessing its 4681 // Tells whether the instance needs security checks when accessing its
4692 // properties. 4682 // properties.
4693 inline void set_is_access_check_needed(bool access_check_needed); 4683 inline void set_is_access_check_needed(bool access_check_needed);
4694 inline bool is_access_check_needed(); 4684 inline bool is_access_check_needed();
4695 4685
4696 // [prototype]: implicit prototype object. 4686 // [prototype]: implicit prototype object.
4697 DECL_ACCESSORS(prototype, Object) 4687 DECL_ACCESSORS(prototype, Object)
4698 4688
4699 // [constructor]: points back to the function responsible for this map. 4689 // [constructor]: points back to the function responsible for this map.
4700 DECL_ACCESSORS(constructor, Object) 4690 DECL_ACCESSORS(constructor, Object)
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
4869 void SharedMapVerify(); 4859 void SharedMapVerify();
4870 #endif 4860 #endif
4871 4861
4872 inline int visitor_id(); 4862 inline int visitor_id();
4873 inline void set_visitor_id(int visitor_id); 4863 inline void set_visitor_id(int visitor_id);
4874 4864
4875 typedef void (*TraverseCallback)(Map* map, void* data); 4865 typedef void (*TraverseCallback)(Map* map, void* data);
4876 4866
4877 void TraverseTransitionTree(TraverseCallback callback, void* data); 4867 void TraverseTransitionTree(TraverseCallback callback, void* data);
4878 4868
4879 // When you set the prototype of an object using the __proto__ accessor you
4880 // need a new map for the object (the prototype is stored in the map). In
4881 // order not to multiply maps unnecessarily we store these as transitions in
4882 // the original map. That way we can transition to the same map if the same
4883 // prototype is set, rather than creating a new map every time. The
4884 // transitions are in the form of a map where the keys are prototype objects
4885 // and the values are the maps the are transitioned to. The special key
4886 // the_hole denotes the map we should transition to when the
4887 // used_for_prototype flag is set.
4888 static const int kMaxCachedPrototypeTransitions = 256; 4869 static const int kMaxCachedPrototypeTransitions = 256;
4889 4870
4890 Map* GetPrototypeTransition(Object* prototype); 4871 Object* GetPrototypeTransition(Object* prototype);
4891 4872
4892 MUST_USE_RESULT MaybeObject* PutPrototypeTransition(Object* prototype, 4873 MUST_USE_RESULT MaybeObject* PutPrototypeTransition(Object* prototype,
4893 Map* map); 4874 Map* map);
4894 4875
4895 static const int kMaxPreAllocatedPropertyFields = 255; 4876 static const int kMaxPreAllocatedPropertyFields = 255;
4896 4877
4897 // Layout description. 4878 // Layout description.
4898 static const int kInstanceSizesOffset = HeapObject::kHeaderSize; 4879 static const int kInstanceSizesOffset = HeapObject::kHeaderSize;
4899 static const int kInstanceAttributesOffset = kInstanceSizesOffset + kIntSize; 4880 static const int kInstanceAttributesOffset = kInstanceSizesOffset + kIntSize;
4900 static const int kPrototypeOffset = kInstanceAttributesOffset + kIntSize; 4881 static const int kPrototypeOffset = kInstanceAttributesOffset + kIntSize;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
4973 static const int8_t kMaximumBitField2FastHoleyElementValue = 4954 static const int8_t kMaximumBitField2FastHoleyElementValue =
4974 static_cast<int8_t>((FAST_HOLEY_ELEMENTS + 1) << 4955 static_cast<int8_t>((FAST_HOLEY_ELEMENTS + 1) <<
4975 Map::kElementsKindShift) - 1; 4956 Map::kElementsKindShift) - 1;
4976 static const int8_t kMaximumBitField2FastHoleySmiElementValue = 4957 static const int8_t kMaximumBitField2FastHoleySmiElementValue =
4977 static_cast<int8_t>((FAST_HOLEY_SMI_ELEMENTS + 1) << 4958 static_cast<int8_t>((FAST_HOLEY_SMI_ELEMENTS + 1) <<
4978 Map::kElementsKindShift) - 1; 4959 Map::kElementsKindShift) - 1;
4979 4960
4980 // Bit positions for bit field 3 4961 // Bit positions for bit field 3
4981 static const int kIsShared = 0; 4962 static const int kIsShared = 0;
4982 static const int kFunctionWithPrototype = 1; 4963 static const int kFunctionWithPrototype = 1;
4983 static const int kUsedForPrototype = 2;
4984 4964
4985 // Layout of the default cache. It holds alternating name and code objects. 4965 // Layout of the default cache. It holds alternating name and code objects.
4986 static const int kCodeCacheEntrySize = 2; 4966 static const int kCodeCacheEntrySize = 2;
4987 static const int kCodeCacheEntryNameOffset = 0; 4967 static const int kCodeCacheEntryNameOffset = 0;
4988 static const int kCodeCacheEntryCodeOffset = 1; 4968 static const int kCodeCacheEntryCodeOffset = 1;
4989 4969
4990 typedef FixedBodyDescriptor<kPointerFieldsBeginOffset, 4970 typedef FixedBodyDescriptor<kPointerFieldsBeginOffset,
4991 kPointerFieldsEndOffset, 4971 kPointerFieldsEndOffset,
4992 kSize> BodyDescriptor; 4972 kSize> BodyDescriptor;
4993 4973
(...skipping 3690 matching lines...) Expand 10 before | Expand all | Expand 10 after
8684 } else { 8664 } else {
8685 value &= ~(1 << bit_position); 8665 value &= ~(1 << bit_position);
8686 } 8666 }
8687 return value; 8667 return value;
8688 } 8668 }
8689 }; 8669 };
8690 8670
8691 } } // namespace v8::internal 8671 } } // namespace v8::internal
8692 8672
8693 #endif // V8_OBJECTS_H_ 8673 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « no previous file | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698