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

Side by Side Diff: src/objects.h

Issue 9008012: Move handlified functions from handles.cc to objects.cc (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: More formatting fixes. Created 8 years, 11 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/liveedit.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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 1324 matching lines...) Expand 10 before | Expand all | Expand 10 after
1335 public: 1335 public:
1336 enum DeleteMode { 1336 enum DeleteMode {
1337 NORMAL_DELETION, 1337 NORMAL_DELETION,
1338 STRICT_DELETION, 1338 STRICT_DELETION,
1339 FORCE_DELETION 1339 FORCE_DELETION
1340 }; 1340 };
1341 1341
1342 // Casting. 1342 // Casting.
1343 static inline JSReceiver* cast(Object* obj); 1343 static inline JSReceiver* cast(Object* obj);
1344 1344
1345 static Handle<Object> SetProperty(Handle<JSReceiver> object,
1346 Handle<String> key,
1347 Handle<Object> value,
1348 PropertyAttributes attributes,
1349 StrictModeFlag strict_mode);
1345 // Can cause GC. 1350 // Can cause GC.
1346 MUST_USE_RESULT MaybeObject* SetProperty(String* key, 1351 MUST_USE_RESULT MaybeObject* SetProperty(String* key,
1347 Object* value, 1352 Object* value,
1348 PropertyAttributes attributes, 1353 PropertyAttributes attributes,
1349 StrictModeFlag strict_mode); 1354 StrictModeFlag strict_mode);
1350 MUST_USE_RESULT MaybeObject* SetProperty(LookupResult* result, 1355 MUST_USE_RESULT MaybeObject* SetProperty(LookupResult* result,
1351 String* key, 1356 String* key,
1352 Object* value, 1357 Object* value,
1353 PropertyAttributes attributes, 1358 PropertyAttributes attributes,
1354 StrictModeFlag strict_mode); 1359 StrictModeFlag strict_mode);
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1514 MUST_USE_RESULT MaybeObject* SetPropertyWithInterceptor( 1519 MUST_USE_RESULT MaybeObject* SetPropertyWithInterceptor(
1515 String* name, 1520 String* name,
1516 Object* value, 1521 Object* value,
1517 PropertyAttributes attributes, 1522 PropertyAttributes attributes,
1518 StrictModeFlag strict_mode); 1523 StrictModeFlag strict_mode);
1519 MUST_USE_RESULT MaybeObject* SetPropertyPostInterceptor( 1524 MUST_USE_RESULT MaybeObject* SetPropertyPostInterceptor(
1520 String* name, 1525 String* name,
1521 Object* value, 1526 Object* value,
1522 PropertyAttributes attributes, 1527 PropertyAttributes attributes,
1523 StrictModeFlag strict_mode); 1528 StrictModeFlag strict_mode);
1529
1530 static Handle<Object> SetLocalPropertyIgnoreAttributes(
1531 Handle<JSObject> object,
1532 Handle<String> key,
1533 Handle<Object> value,
1534 PropertyAttributes attributes);
1535
1536 // Can cause GC.
1524 MUST_USE_RESULT MaybeObject* SetLocalPropertyIgnoreAttributes( 1537 MUST_USE_RESULT MaybeObject* SetLocalPropertyIgnoreAttributes(
1525 String* key, 1538 String* key,
1526 Object* value, 1539 Object* value,
1527 PropertyAttributes attributes); 1540 PropertyAttributes attributes);
1528 1541
1529 // Retrieve a value in a normalized object given a lookup result. 1542 // Retrieve a value in a normalized object given a lookup result.
1530 // Handles the special representation of JS global objects. 1543 // Handles the special representation of JS global objects.
1531 Object* GetNormalizedProperty(LookupResult* result); 1544 Object* GetNormalizedProperty(LookupResult* result);
1532 1545
1533 // Sets the property value in a normalized object given a lookup result. 1546 // Sets the property value in a normalized object given a lookup result.
1534 // Handles the special representation of JS global objects. 1547 // Handles the special representation of JS global objects.
1535 Object* SetNormalizedProperty(LookupResult* result, Object* value); 1548 Object* SetNormalizedProperty(LookupResult* result, Object* value);
1536 1549
1537 // Sets the property value in a normalized object given (key, value, details). 1550 // Sets the property value in a normalized object given (key, value, details).
1538 // Handles the special representation of JS global objects. 1551 // Handles the special representation of JS global objects.
1552 static Handle<Object> SetNormalizedProperty(Handle<JSObject> object,
1553 Handle<String> key,
1554 Handle<Object> value,
1555 PropertyDetails details);
1556
1539 MUST_USE_RESULT MaybeObject* SetNormalizedProperty(String* name, 1557 MUST_USE_RESULT MaybeObject* SetNormalizedProperty(String* name,
1540 Object* value, 1558 Object* value,
1541 PropertyDetails details); 1559 PropertyDetails details);
1542 1560
1543 // Deletes the named property in a normalized object. 1561 // Deletes the named property in a normalized object.
1544 MUST_USE_RESULT MaybeObject* DeleteNormalizedProperty(String* name, 1562 MUST_USE_RESULT MaybeObject* DeleteNormalizedProperty(String* name,
1545 DeleteMode mode); 1563 DeleteMode mode);
1546 1564
1547 // Retrieve interceptors. 1565 // Retrieve interceptors.
1548 InterceptorInfo* GetNamedInterceptor(); 1566 InterceptorInfo* GetNamedInterceptor();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1598 // Accessors for hidden properties object. 1616 // Accessors for hidden properties object.
1599 // 1617 //
1600 // Hidden properties are not local properties of the object itself. 1618 // Hidden properties are not local properties of the object itself.
1601 // Instead they are stored in an auxiliary structure kept as a local 1619 // Instead they are stored in an auxiliary structure kept as a local
1602 // property with a special name Heap::hidden_symbol(). But if the 1620 // property with a special name Heap::hidden_symbol(). But if the
1603 // receiver is a JSGlobalProxy then the auxiliary object is a property 1621 // receiver is a JSGlobalProxy then the auxiliary object is a property
1604 // of its prototype, and if it's a detached proxy, then you can't have 1622 // of its prototype, and if it's a detached proxy, then you can't have
1605 // hidden properties. 1623 // hidden properties.
1606 1624
1607 // Sets a hidden property on this object. Returns this object if successful, 1625 // Sets a hidden property on this object. Returns this object if successful,
1608 // undefined if called on a detached proxy, and a failure if a GC 1626 // undefined if called on a detached proxy.
1609 // is required 1627 static Handle<Object> SetHiddenProperty(Handle<JSObject> obj,
1628 Handle<String> key,
1629 Handle<Object> value);
1630 // Returns a failure if a GC is required.
1610 MaybeObject* SetHiddenProperty(String* key, Object* value); 1631 MaybeObject* SetHiddenProperty(String* key, Object* value);
1611 // Gets the value of a hidden property with the given key. Returns undefined 1632 // Gets the value of a hidden property with the given key. Returns undefined
1612 // if the property doesn't exist (or if called on a detached proxy), 1633 // if the property doesn't exist (or if called on a detached proxy),
1613 // otherwise returns the value set for the key. 1634 // otherwise returns the value set for the key.
1614 Object* GetHiddenProperty(String* key); 1635 Object* GetHiddenProperty(String* key);
1615 // Deletes a hidden property. Deleting a non-existing property is 1636 // Deletes a hidden property. Deleting a non-existing property is
1616 // considered successful. 1637 // considered successful.
1617 void DeleteHiddenProperty(String* key); 1638 void DeleteHiddenProperty(String* key);
1618 // Returns true if the object has a property with the hidden symbol as name. 1639 // Returns true if the object has a property with the hidden symbol as name.
1619 bool HasHiddenProperties(); 1640 bool HasHiddenProperties();
1620 1641
1642 static int GetIdentityHash(Handle<JSObject> obj);
1621 MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag); 1643 MUST_USE_RESULT MaybeObject* GetIdentityHash(CreationFlag flag);
1622 MUST_USE_RESULT MaybeObject* SetIdentityHash(Object* hash, CreationFlag flag); 1644 MUST_USE_RESULT MaybeObject* SetIdentityHash(Object* hash, CreationFlag flag);
1623 1645
1646 static Handle<Object> DeleteProperty(Handle<JSObject> obj,
1647 Handle<String> name);
1624 MUST_USE_RESULT MaybeObject* DeleteProperty(String* name, DeleteMode mode); 1648 MUST_USE_RESULT MaybeObject* DeleteProperty(String* name, DeleteMode mode);
1649
1650 static Handle<Object> DeleteElement(Handle<JSObject> obj, uint32_t index);
1625 MUST_USE_RESULT MaybeObject* DeleteElement(uint32_t index, DeleteMode mode); 1651 MUST_USE_RESULT MaybeObject* DeleteElement(uint32_t index, DeleteMode mode);
1626 1652
1627 inline void ValidateSmiOnlyElements(); 1653 inline void ValidateSmiOnlyElements();
1628 1654
1629 // Makes sure that this object can contain HeapObject as elements. 1655 // Makes sure that this object can contain HeapObject as elements.
1630 inline MaybeObject* EnsureCanContainHeapObjectElements(); 1656 inline MaybeObject* EnsureCanContainHeapObjectElements();
1631 1657
1632 // Makes sure that this object can contain the specified elements. 1658 // Makes sure that this object can contain the specified elements.
1633 inline MaybeObject* EnsureCanContainElements(Object** elements, 1659 inline MaybeObject* EnsureCanContainElements(Object** elements,
1634 uint32_t count, 1660 uint32_t count,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1694 Object* value, 1720 Object* value,
1695 StrictModeFlag strict_mode, 1721 StrictModeFlag strict_mode,
1696 bool check_prototype); 1722 bool check_prototype);
1697 1723
1698 MUST_USE_RESULT MaybeObject* SetFastDoubleElement( 1724 MUST_USE_RESULT MaybeObject* SetFastDoubleElement(
1699 uint32_t index, 1725 uint32_t index,
1700 Object* value, 1726 Object* value,
1701 StrictModeFlag strict_mode, 1727 StrictModeFlag strict_mode,
1702 bool check_prototype = true); 1728 bool check_prototype = true);
1703 1729
1704 // Set the index'th array element. 1730
1731 static Handle<Object> SetOwnElement(Handle<JSObject> object,
1732 uint32_t index,
1733 Handle<Object> value,
1734 StrictModeFlag strict_mode);
1735
1736 // Empty handle is returned if the element cannot be set to the given value.
1737 static MUST_USE_RESULT Handle<Object> SetElement(Handle<JSObject> object,
1738 uint32_t index,
1739 Handle<Object> value,
1740 StrictModeFlag strict_mode);
1741
1705 // A Failure object is returned if GC is needed. 1742 // A Failure object is returned if GC is needed.
1706 MUST_USE_RESULT MaybeObject* SetElement(uint32_t index, 1743 MUST_USE_RESULT MaybeObject* SetElement(uint32_t index,
1707 Object* value, 1744 Object* value,
1708 StrictModeFlag strict_mode, 1745 StrictModeFlag strict_mode,
1709 bool check_prototype); 1746 bool check_prototype);
1710 1747
1711 // Returns the index'th element. 1748 // Returns the index'th element.
1712 // The undefined object if index is out of bounds. 1749 // The undefined object if index is out of bounds.
1713 MaybeObject* GetElementWithInterceptor(Object* receiver, uint32_t index); 1750 MaybeObject* GetElementWithInterceptor(Object* receiver, uint32_t index);
1714 1751
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1804 Object* value, 1841 Object* value,
1805 PropertyAttributes attributes); 1842 PropertyAttributes attributes);
1806 1843
1807 // Returns a new map with all transitions dropped from the object's current 1844 // Returns a new map with all transitions dropped from the object's current
1808 // map and the ElementsKind set. 1845 // map and the ElementsKind set.
1809 static Handle<Map> GetElementsTransitionMap(Handle<JSObject> object, 1846 static Handle<Map> GetElementsTransitionMap(Handle<JSObject> object,
1810 ElementsKind to_kind); 1847 ElementsKind to_kind);
1811 MUST_USE_RESULT MaybeObject* GetElementsTransitionMap( 1848 MUST_USE_RESULT MaybeObject* GetElementsTransitionMap(
1812 ElementsKind elements_kind); 1849 ElementsKind elements_kind);
1813 1850
1851 static Handle<Object> TransitionElementsKind(Handle<JSObject> object,
1852 ElementsKind to_kind);
1853
1814 MUST_USE_RESULT MaybeObject* TransitionElementsKind(ElementsKind to_kind); 1854 MUST_USE_RESULT MaybeObject* TransitionElementsKind(ElementsKind to_kind);
1815 1855
1816 // Converts a descriptor of any other type to a real field, 1856 // Converts a descriptor of any other type to a real field,
1817 // backed by the properties array. Descriptors of visible 1857 // backed by the properties array. Descriptors of visible
1818 // types, such as CONSTANT_FUNCTION, keep their enumeration order. 1858 // types, such as CONSTANT_FUNCTION, keep their enumeration order.
1819 // Converts the descriptor on the original object's map to a 1859 // Converts the descriptor on the original object's map to a
1820 // map transition, and the the new field is on the object's new map. 1860 // map transition, and the the new field is on the object's new map.
1821 MUST_USE_RESULT MaybeObject* ConvertDescriptorToFieldAndMapTransition( 1861 MUST_USE_RESULT MaybeObject* ConvertDescriptorToFieldAndMapTransition(
1822 String* name, 1862 String* name,
1823 Object* new_value, 1863 Object* new_value,
(...skipping 20 matching lines...) Expand all
1844 // Add a property to an object. 1884 // Add a property to an object.
1845 MUST_USE_RESULT MaybeObject* AddProperty(String* name, 1885 MUST_USE_RESULT MaybeObject* AddProperty(String* name,
1846 Object* value, 1886 Object* value,
1847 PropertyAttributes attributes, 1887 PropertyAttributes attributes,
1848 StrictModeFlag strict_mode); 1888 StrictModeFlag strict_mode);
1849 1889
1850 // Convert the object to use the canonical dictionary 1890 // Convert the object to use the canonical dictionary
1851 // representation. If the object is expected to have additional properties 1891 // representation. If the object is expected to have additional properties
1852 // added this number can be indicated to have the backing store allocated to 1892 // added this number can be indicated to have the backing store allocated to
1853 // an initial capacity for holding these properties. 1893 // an initial capacity for holding these properties.
1894 static void NormalizeProperties(Handle<JSObject> object,
1895 PropertyNormalizationMode mode,
1896 int expected_additional_properties);
1897
1854 MUST_USE_RESULT MaybeObject* NormalizeProperties( 1898 MUST_USE_RESULT MaybeObject* NormalizeProperties(
1855 PropertyNormalizationMode mode, 1899 PropertyNormalizationMode mode,
1856 int expected_additional_properties); 1900 int expected_additional_properties);
1857 1901
1858 // Convert and update the elements backing store to be a NumberDictionary 1902 // Convert and update the elements backing store to be a NumberDictionary
1859 // dictionary. Returns the backing after conversion. 1903 // dictionary. Returns the backing after conversion.
1904 static Handle<NumberDictionary> NormalizeElements(Handle<JSObject> object);
1905
1860 MUST_USE_RESULT MaybeObject* NormalizeElements(); 1906 MUST_USE_RESULT MaybeObject* NormalizeElements();
1861 1907
1862 static void UpdateMapCodeCache(Handle<JSObject> object, 1908 static void UpdateMapCodeCache(Handle<JSObject> object,
1863 Handle<String> name, 1909 Handle<String> name,
1864 Handle<Code> code); 1910 Handle<Code> code);
1865 1911
1866 MUST_USE_RESULT MaybeObject* UpdateMapCodeCache(String* name, Code* code); 1912 MUST_USE_RESULT MaybeObject* UpdateMapCodeCache(String* name, Code* code);
1867 1913
1868 // Transform slow named properties to fast variants. 1914 // Transform slow named properties to fast variants.
1869 // Returns failure if allocation failed. 1915 // Returns failure if allocation failed.
1916 static void TransformToFastProperties(Handle<JSObject> object,
1917 int unused_property_fields);
1918
1870 MUST_USE_RESULT MaybeObject* TransformToFastProperties( 1919 MUST_USE_RESULT MaybeObject* TransformToFastProperties(
1871 int unused_property_fields); 1920 int unused_property_fields);
1872 1921
1873 // Access fast-case object properties at index. 1922 // Access fast-case object properties at index.
1874 inline Object* FastPropertyAt(int index); 1923 inline Object* FastPropertyAt(int index);
1875 inline Object* FastPropertyAtPut(int index, Object* value); 1924 inline Object* FastPropertyAtPut(int index, Object* value);
1876 1925
1877 // Access to in object properties. 1926 // Access to in object properties.
1878 inline int GetInObjectPropertyOffset(int index); 1927 inline int GetInObjectPropertyOffset(int index);
1879 inline Object* InObjectPropertyAt(int index); 1928 inline Object* InObjectPropertyAt(int index);
(...skipping 11 matching lines...) Expand all
1891 Object* pre_allocated_value, 1940 Object* pre_allocated_value,
1892 Object* filler_value); 1941 Object* filler_value);
1893 1942
1894 // Check whether this object references another object 1943 // Check whether this object references another object
1895 bool ReferencesObject(Object* obj); 1944 bool ReferencesObject(Object* obj);
1896 1945
1897 // Casting. 1946 // Casting.
1898 static inline JSObject* cast(Object* obj); 1947 static inline JSObject* cast(Object* obj);
1899 1948
1900 // Disalow further properties to be added to the object. 1949 // Disalow further properties to be added to the object.
1950 static Handle<Object> PreventExtensions(Handle<JSObject> object);
1901 MUST_USE_RESULT MaybeObject* PreventExtensions(); 1951 MUST_USE_RESULT MaybeObject* PreventExtensions();
1902 1952
1903 1953
1904 // Dispatched behavior. 1954 // Dispatched behavior.
1905 void JSObjectShortPrint(StringStream* accumulator); 1955 void JSObjectShortPrint(StringStream* accumulator);
1906 #ifdef OBJECT_PRINT 1956 #ifdef OBJECT_PRINT
1907 inline void JSObjectPrint() { 1957 inline void JSObjectPrint() {
1908 JSObjectPrint(stdout); 1958 JSObjectPrint(stdout);
1909 } 1959 }
1910 void JSObjectPrint(FILE* out); 1960 void JSObjectPrint(FILE* out);
(...skipping 1055 matching lines...) Expand 10 before | Expand all | Expand 10 after
2966 return reinterpret_cast<NumberDictionary*>(obj); 3016 return reinterpret_cast<NumberDictionary*>(obj);
2967 } 3017 }
2968 3018
2969 // Type specific at put (default NONE attributes is used when adding). 3019 // Type specific at put (default NONE attributes is used when adding).
2970 MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value); 3020 MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value);
2971 MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key, 3021 MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key,
2972 Object* value, 3022 Object* value,
2973 PropertyDetails details); 3023 PropertyDetails details);
2974 3024
2975 // Set an existing entry or add a new one if needed. 3025 // Set an existing entry or add a new one if needed.
3026 // Return the updated dictionary.
3027 MUST_USE_RESULT static Handle<NumberDictionary> Set(
3028 Handle<NumberDictionary> dictionary,
3029 uint32_t index,
3030 Handle<Object> value,
3031 PropertyDetails details);
3032
2976 MUST_USE_RESULT MaybeObject* Set(uint32_t key, 3033 MUST_USE_RESULT MaybeObject* Set(uint32_t key,
2977 Object* value, 3034 Object* value,
2978 PropertyDetails details); 3035 PropertyDetails details);
2979 3036
2980 void UpdateMaxNumberKey(uint32_t key); 3037 void UpdateMaxNumberKey(uint32_t key);
2981 3038
2982 // If slow elements are required we will never go back to fast-case 3039 // If slow elements are required we will never go back to fast-case
2983 // for the elements kept in this dictionary. We require slow 3040 // for the elements kept in this dictionary. We require slow
2984 // elements if an element has been added at an index larger than 3041 // elements if an element has been added at an index larger than
2985 // kRequiresSlowElementsLimit or set_requires_slow_elements() has been called 3042 // kRequiresSlowElementsLimit or set_requires_slow_elements() has been called
(...skipping 5029 matching lines...) Expand 10 before | Expand all | Expand 10 after
8015 } else { 8072 } else {
8016 value &= ~(1 << bit_position); 8073 value &= ~(1 << bit_position);
8017 } 8074 }
8018 return value; 8075 return value;
8019 } 8076 }
8020 }; 8077 };
8021 8078
8022 } } // namespace v8::internal 8079 } } // namespace v8::internal
8023 8080
8024 #endif // V8_OBJECTS_H_ 8081 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/liveedit.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698