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

Side by Side Diff: src/objects.h

Issue 18089024: Handlify JSObject::SetPrototype method. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 5 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/objects.cc » ('j') | src/objects.cc » ('J')
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 1685 matching lines...) Expand 10 before | Expand all | Expand 10 after
1696 inline bool HasLocalProperty(Name* name); 1696 inline bool HasLocalProperty(Name* name);
1697 inline bool HasElement(uint32_t index); 1697 inline bool HasElement(uint32_t index);
1698 inline bool HasLocalElement(uint32_t index); 1698 inline bool HasLocalElement(uint32_t index);
1699 1699
1700 // Return the object's prototype (might be Heap::null_value()). 1700 // Return the object's prototype (might be Heap::null_value()).
1701 inline Object* GetPrototype(); 1701 inline Object* GetPrototype();
1702 1702
1703 // Return the constructor function (may be Heap::null_value()). 1703 // Return the constructor function (may be Heap::null_value()).
1704 inline Object* GetConstructor(); 1704 inline Object* GetConstructor();
1705 1705
1706 // Set the object's prototype (only JSReceiver and null are allowed).
1707 MUST_USE_RESULT MaybeObject* SetPrototype(Object* value,
1708 bool skip_hidden_prototypes);
1709
1710 // Retrieves a permanent object identity hash code. The undefined value might 1706 // Retrieves a permanent object identity hash code. The undefined value might
1711 // be returned in case no hash was created yet and OMIT_CREATION was used. 1707 // be returned in case no hash was created yet and OMIT_CREATION was used.
1712 inline MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag); 1708 inline MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag);
1713 1709
1714 // Lookup a property. If found, the result is valid and has 1710 // Lookup a property. If found, the result is valid and has
1715 // detailed information. 1711 // detailed information.
1716 void LocalLookup(Name* name, LookupResult* result, 1712 void LocalLookup(Name* name, LookupResult* result,
1717 bool search_hidden_prototypes = false); 1713 bool search_hidden_prototypes = false);
1718 void Lookup(Name* name, LookupResult* result); 1714 void Lookup(Name* name, LookupResult* result);
1719 1715
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1901 PropertyDetails details); 1897 PropertyDetails details);
1902 1898
1903 MUST_USE_RESULT MaybeObject* SetNormalizedProperty(Name* name, 1899 MUST_USE_RESULT MaybeObject* SetNormalizedProperty(Name* name,
1904 Object* value, 1900 Object* value,
1905 PropertyDetails details); 1901 PropertyDetails details);
1906 1902
1907 // Deletes the named property in a normalized object. 1903 // Deletes the named property in a normalized object.
1908 MUST_USE_RESULT MaybeObject* DeleteNormalizedProperty(Name* name, 1904 MUST_USE_RESULT MaybeObject* DeleteNormalizedProperty(Name* name,
1909 DeleteMode mode); 1905 DeleteMode mode);
1910 1906
1907 static void OptimizeAsPrototype(Handle<JSObject> object);
1911 MUST_USE_RESULT MaybeObject* OptimizeAsPrototype(); 1908 MUST_USE_RESULT MaybeObject* OptimizeAsPrototype();
1912 1909
1913 // Retrieve interceptors. 1910 // Retrieve interceptors.
1914 InterceptorInfo* GetNamedInterceptor(); 1911 InterceptorInfo* GetNamedInterceptor();
1915 InterceptorInfo* GetIndexedInterceptor(); 1912 InterceptorInfo* GetIndexedInterceptor();
1916 1913
1917 // Used from JSReceiver. 1914 // Used from JSReceiver.
1918 PropertyAttributes GetPropertyAttributePostInterceptor(JSObject* receiver, 1915 PropertyAttributes GetPropertyAttributePostInterceptor(JSObject* receiver,
1919 Name* name, 1916 Name* name,
1920 bool continue_search); 1917 bool continue_search);
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
2304 inline void FastPropertyAtPut(int index, Object* value); 2301 inline void FastPropertyAtPut(int index, Object* value);
2305 2302
2306 // Access to in object properties. 2303 // Access to in object properties.
2307 inline int GetInObjectPropertyOffset(int index); 2304 inline int GetInObjectPropertyOffset(int index);
2308 inline Object* InObjectPropertyAt(int index); 2305 inline Object* InObjectPropertyAt(int index);
2309 inline Object* InObjectPropertyAtPut(int index, 2306 inline Object* InObjectPropertyAtPut(int index,
2310 Object* value, 2307 Object* value,
2311 WriteBarrierMode mode 2308 WriteBarrierMode mode
2312 = UPDATE_WRITE_BARRIER); 2309 = UPDATE_WRITE_BARRIER);
2313 2310
2311 // Set the object's prototype (only JSReceiver and null are allowed values).
2312 static Handle<Object> SetPrototype(Handle<JSObject> object,
2313 Handle<Object> value,
2314 bool skip_hidden_prototypes = false);
2315
2314 // Initializes the body after properties slot, properties slot is 2316 // Initializes the body after properties slot, properties slot is
2315 // initialized by set_properties. Fill the pre-allocated fields with 2317 // initialized by set_properties. Fill the pre-allocated fields with
2316 // pre_allocated_value and the rest with filler_value. 2318 // pre_allocated_value and the rest with filler_value.
2317 // Note: this call does not update write barrier, the caller is responsible 2319 // Note: this call does not update write barrier, the caller is responsible
2318 // to ensure that |filler_value| can be collected without WB here. 2320 // to ensure that |filler_value| can be collected without WB here.
2319 inline void InitializeBody(Map* map, 2321 inline void InitializeBody(Map* map,
2320 Object* pre_allocated_value, 2322 Object* pre_allocated_value,
2321 Object* filler_value); 2323 Object* filler_value);
2322 2324
2323 // Check whether this object references another object 2325 // Check whether this object references another object
(...skipping 3151 matching lines...) Expand 10 before | Expand all | Expand 10 after
5475 TransitionFlag flag); 5477 TransitionFlag flag);
5476 5478
5477 MUST_USE_RESULT MaybeObject* CopyNormalized(PropertyNormalizationMode mode, 5479 MUST_USE_RESULT MaybeObject* CopyNormalized(PropertyNormalizationMode mode,
5478 NormalizedMapSharingMode sharing); 5480 NormalizedMapSharingMode sharing);
5479 5481
5480 inline void AppendDescriptor(Descriptor* desc, 5482 inline void AppendDescriptor(Descriptor* desc,
5481 const DescriptorArray::WhitenessWitness&); 5483 const DescriptorArray::WhitenessWitness&);
5482 5484
5483 // Returns a copy of the map, with all transitions dropped from the 5485 // Returns a copy of the map, with all transitions dropped from the
5484 // instance descriptors. 5486 // instance descriptors.
5487 static Handle<Map> Copy(Handle<Map> map);
5485 MUST_USE_RESULT MaybeObject* Copy(); 5488 MUST_USE_RESULT MaybeObject* Copy();
5486 5489
5487 // Returns the next free property index (only valid for FAST MODE). 5490 // Returns the next free property index (only valid for FAST MODE).
5488 int NextFreePropertyIndex(); 5491 int NextFreePropertyIndex();
5489 5492
5490 // Returns the number of properties described in instance_descriptors 5493 // Returns the number of properties described in instance_descriptors
5491 // filtering out properties with the specified attributes. 5494 // filtering out properties with the specified attributes.
5492 int NumberOfDescribedProperties(DescriptorFlag which = OWN_DESCRIPTORS, 5495 int NumberOfDescribedProperties(DescriptorFlag which = OWN_DESCRIPTORS,
5493 PropertyAttributes filter = NONE); 5496 PropertyAttributes filter = NONE);
5494 5497
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
5601 void TraverseTransitionTree(TraverseCallback callback, void* data); 5604 void TraverseTransitionTree(TraverseCallback callback, void* data);
5602 5605
5603 // When you set the prototype of an object using the __proto__ accessor you 5606 // When you set the prototype of an object using the __proto__ accessor you
5604 // need a new map for the object (the prototype is stored in the map). In 5607 // need a new map for the object (the prototype is stored in the map). In
5605 // order not to multiply maps unnecessarily we store these as transitions in 5608 // order not to multiply maps unnecessarily we store these as transitions in
5606 // the original map. That way we can transition to the same map if the same 5609 // the original map. That way we can transition to the same map if the same
5607 // prototype is set, rather than creating a new map every time. The 5610 // prototype is set, rather than creating a new map every time. The
5608 // transitions are in the form of a map where the keys are prototype objects 5611 // transitions are in the form of a map where the keys are prototype objects
5609 // and the values are the maps the are transitioned to. 5612 // and the values are the maps the are transitioned to.
5610 static const int kMaxCachedPrototypeTransitions = 256; 5613 static const int kMaxCachedPrototypeTransitions = 256;
5611 5614 static Handle<Map> GetPrototypeTransition(Handle<Map> map,
5612 Map* GetPrototypeTransition(Object* prototype); 5615 Handle<Object> prototype);
5613 5616 static Handle<Map> PutPrototypeTransition(Handle<Map> map,
5614 MUST_USE_RESULT MaybeObject* PutPrototypeTransition(Object* prototype, 5617 Handle<Object> prototype,
5615 Map* map); 5618 Handle<Map> target_map);
5616 5619
5617 static const int kMaxPreAllocatedPropertyFields = 255; 5620 static const int kMaxPreAllocatedPropertyFields = 255;
5618 5621
5619 // Constant for denoting that the enum cache is not yet initialized. 5622 // Constant for denoting that the enum cache is not yet initialized.
5620 static const int kInvalidEnumCache = EnumLengthBits::kMax; 5623 static const int kInvalidEnumCache = EnumLengthBits::kMax;
5621 5624
5622 // Layout description. 5625 // Layout description.
5623 static const int kInstanceSizesOffset = HeapObject::kHeaderSize; 5626 static const int kInstanceSizesOffset = HeapObject::kHeaderSize;
5624 static const int kInstanceAttributesOffset = kInstanceSizesOffset + kIntSize; 5627 static const int kInstanceAttributesOffset = kInstanceSizesOffset + kIntSize;
5625 static const int kPrototypeOffset = kInstanceAttributesOffset + kIntSize; 5628 static const int kPrototypeOffset = kInstanceAttributesOffset + kIntSize;
(...skipping 4119 matching lines...) Expand 10 before | Expand all | Expand 10 after
9745 } else { 9748 } else {
9746 value &= ~(1 << bit_position); 9749 value &= ~(1 << bit_position);
9747 } 9750 }
9748 return value; 9751 return value;
9749 } 9752 }
9750 }; 9753 };
9751 9754
9752 } } // namespace v8::internal 9755 } } // namespace v8::internal
9753 9756
9754 #endif // V8_OBJECTS_H_ 9757 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/handles.cc ('k') | src/objects.cc » ('j') | src/objects.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698