OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #ifndef VM_OBJECT_H_ | 5 #ifndef VM_OBJECT_H_ |
6 #define VM_OBJECT_H_ | 6 #define VM_OBJECT_H_ |
7 | 7 |
8 #include "include/dart_api.h" | 8 #include "include/dart_api.h" |
9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
10 #include "platform/utils.h" | 10 #include "platform/utils.h" |
(...skipping 1605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1616 // Signature class of this closure function or signature function. | 1616 // Signature class of this closure function or signature function. |
1617 RawClass* signature_class() const; | 1617 RawClass* signature_class() const; |
1618 void set_signature_class(const Class& value) const; | 1618 void set_signature_class(const Class& value) const; |
1619 | 1619 |
1620 void set_extracted_method_closure(const Function& function) const; | 1620 void set_extracted_method_closure(const Function& function) const; |
1621 RawFunction* extracted_method_closure() const; | 1621 RawFunction* extracted_method_closure() const; |
1622 | 1622 |
1623 void set_saved_args_desc(const Array& array) const; | 1623 void set_saved_args_desc(const Array& array) const; |
1624 RawArray* saved_args_desc() const; | 1624 RawArray* saved_args_desc() const; |
1625 | 1625 |
1626 void set_saved_static_field(const Field& array) const; | |
1627 RawField* saved_static_field() const; | |
1628 | |
1629 bool IsMethodExtractor() const { | 1626 bool IsMethodExtractor() const { |
1630 return kind() == RawFunction::kMethodExtractor; | 1627 return kind() == RawFunction::kMethodExtractor; |
1631 } | 1628 } |
1632 | 1629 |
1633 bool IsNoSuchMethodDispatcher() const { | 1630 bool IsNoSuchMethodDispatcher() const { |
1634 return kind() == RawFunction::kNoSuchMethodDispatcher; | 1631 return kind() == RawFunction::kNoSuchMethodDispatcher; |
1635 } | 1632 } |
1636 | 1633 |
1637 bool IsInvokeFieldDispatcher() const { | 1634 bool IsInvokeFieldDispatcher() const { |
1638 return kind() == RawFunction::kInvokeFieldDispatcher; | 1635 return kind() == RawFunction::kInvokeFieldDispatcher; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1691 case RawFunction::kSetterFunction: | 1688 case RawFunction::kSetterFunction: |
1692 case RawFunction::kImplicitGetter: | 1689 case RawFunction::kImplicitGetter: |
1693 case RawFunction::kImplicitSetter: | 1690 case RawFunction::kImplicitSetter: |
1694 case RawFunction::kMethodExtractor: | 1691 case RawFunction::kMethodExtractor: |
1695 case RawFunction::kNoSuchMethodDispatcher: | 1692 case RawFunction::kNoSuchMethodDispatcher: |
1696 case RawFunction::kInvokeFieldDispatcher: | 1693 case RawFunction::kInvokeFieldDispatcher: |
1697 return true; | 1694 return true; |
1698 case RawFunction::kClosureFunction: | 1695 case RawFunction::kClosureFunction: |
1699 case RawFunction::kConstructor: | 1696 case RawFunction::kConstructor: |
1700 case RawFunction::kImplicitStaticFinalGetter: | 1697 case RawFunction::kImplicitStaticFinalGetter: |
1701 case RawFunction::kStaticInitializer: | |
1702 return false; | 1698 return false; |
1703 default: | 1699 default: |
1704 UNREACHABLE(); | 1700 UNREACHABLE(); |
1705 return false; | 1701 return false; |
1706 } | 1702 } |
1707 } | 1703 } |
1708 bool IsStaticFunction() const { | 1704 bool IsStaticFunction() const { |
1709 if (!is_static()) { | 1705 if (!is_static()) { |
1710 return false; | 1706 return false; |
1711 } | 1707 } |
1712 switch (kind()) { | 1708 switch (kind()) { |
1713 case RawFunction::kRegularFunction: | 1709 case RawFunction::kRegularFunction: |
1714 case RawFunction::kGetterFunction: | 1710 case RawFunction::kGetterFunction: |
1715 case RawFunction::kSetterFunction: | 1711 case RawFunction::kSetterFunction: |
1716 case RawFunction::kImplicitGetter: | 1712 case RawFunction::kImplicitGetter: |
1717 case RawFunction::kImplicitSetter: | 1713 case RawFunction::kImplicitSetter: |
1718 case RawFunction::kImplicitStaticFinalGetter: | 1714 case RawFunction::kImplicitStaticFinalGetter: |
1719 case RawFunction::kStaticInitializer: | |
1720 return true; | 1715 return true; |
1721 case RawFunction::kClosureFunction: | 1716 case RawFunction::kClosureFunction: |
1722 case RawFunction::kConstructor: | 1717 case RawFunction::kConstructor: |
1723 return false; | 1718 return false; |
1724 default: | 1719 default: |
1725 UNREACHABLE(); | 1720 UNREACHABLE(); |
1726 return false; | 1721 return false; |
1727 } | 1722 } |
1728 } | 1723 } |
1729 bool IsInFactoryScope() const; | 1724 bool IsInFactoryScope() const; |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1922 // Returns true if this function represents an explicit setter function. | 1917 // Returns true if this function represents an explicit setter function. |
1923 bool IsSetterFunction() const { | 1918 bool IsSetterFunction() const { |
1924 return kind() == RawFunction::kSetterFunction; | 1919 return kind() == RawFunction::kSetterFunction; |
1925 } | 1920 } |
1926 | 1921 |
1927 // Returns true if this function represents an implicit setter function. | 1922 // Returns true if this function represents an implicit setter function. |
1928 bool IsImplicitSetterFunction() const { | 1923 bool IsImplicitSetterFunction() const { |
1929 return kind() == RawFunction::kImplicitSetter; | 1924 return kind() == RawFunction::kImplicitSetter; |
1930 } | 1925 } |
1931 | 1926 |
1932 // Returns true if this function represents an static initializer function. | |
1933 bool IsStaticInitializerFunction() const { | |
1934 return kind() == RawFunction::kStaticInitializer; | |
1935 } | |
1936 | |
1937 // Returns true if this function represents a (possibly implicit) closure | 1927 // Returns true if this function represents a (possibly implicit) closure |
1938 // function. | 1928 // function. |
1939 bool IsClosureFunction() const { | 1929 bool IsClosureFunction() const { |
1940 return kind() == RawFunction::kClosureFunction; | 1930 return kind() == RawFunction::kClosureFunction; |
1941 } | 1931 } |
1942 | 1932 |
1943 // Returns true if this function represents an implicit closure function. | 1933 // Returns true if this function represents an implicit closure function. |
1944 bool IsImplicitClosureFunction() const; | 1934 bool IsImplicitClosureFunction() const; |
1945 | 1935 |
1946 // Returns true if this function represents a non implicit closure function. | 1936 // Returns true if this function represents a non implicit closure function. |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1993 // function. | 1983 // function. |
1994 // The function and the class share the same given name. | 1984 // The function and the class share the same given name. |
1995 static RawFunction* NewClosureFunction(const String& name, | 1985 static RawFunction* NewClosureFunction(const String& name, |
1996 const Function& parent, | 1986 const Function& parent, |
1997 intptr_t token_pos); | 1987 intptr_t token_pos); |
1998 | 1988 |
1999 static RawFunction* NewEvalFunction(const Class& owner, | 1989 static RawFunction* NewEvalFunction(const Class& owner, |
2000 const Script& script, | 1990 const Script& script, |
2001 bool is_static); | 1991 bool is_static); |
2002 | 1992 |
2003 // Creates a new static initializer function which is invoked in the implicit | |
2004 // static getter function. | |
2005 static RawFunction* NewStaticInitializer(const Field& field); | |
2006 | |
2007 // Allocate new function object, clone values from this function. The | 1993 // Allocate new function object, clone values from this function. The |
2008 // owner of the clone is new_owner. | 1994 // owner of the clone is new_owner. |
2009 RawFunction* Clone(const Class& new_owner) const; | 1995 RawFunction* Clone(const Class& new_owner) const; |
2010 | 1996 |
2011 // Slow function, use in asserts to track changes in important library | 1997 // Slow function, use in asserts to track changes in important library |
2012 // functions. | 1998 // functions. |
2013 int32_t SourceFingerprint() const; | 1999 int32_t SourceFingerprint() const; |
2014 | 2000 |
2015 // Return false and report an error if the fingerprint does not match. | 2001 // Return false and report an error if the fingerprint does not match. |
2016 bool CheckSourceFingerprint(int32_t fp) const; | 2002 bool CheckSourceFingerprint(int32_t fp) const; |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2331 void set_dependent_code(const Array& array) const; | 2317 void set_dependent_code(const Array& array) const; |
2332 | 2318 |
2333 // Add the given code object to the list of dependent ones. | 2319 // Add the given code object to the list of dependent ones. |
2334 void RegisterDependentCode(const Code& code) const; | 2320 void RegisterDependentCode(const Code& code) const; |
2335 | 2321 |
2336 // Deoptimize all dependent code objects. | 2322 // Deoptimize all dependent code objects. |
2337 void DeoptimizeDependentCode() const; | 2323 void DeoptimizeDependentCode() const; |
2338 | 2324 |
2339 bool IsUninitialized() const; | 2325 bool IsUninitialized() const; |
2340 | 2326 |
| 2327 void EvaluateInitializer() const; |
| 2328 |
2341 // Constructs getter and setter names for fields and vice versa. | 2329 // Constructs getter and setter names for fields and vice versa. |
2342 static RawString* GetterName(const String& field_name); | 2330 static RawString* GetterName(const String& field_name); |
2343 static RawString* GetterSymbol(const String& field_name); | 2331 static RawString* GetterSymbol(const String& field_name); |
2344 static RawString* SetterName(const String& field_name); | 2332 static RawString* SetterName(const String& field_name); |
2345 static RawString* SetterSymbol(const String& field_name); | 2333 static RawString* SetterSymbol(const String& field_name); |
2346 static RawString* NameFromGetter(const String& getter_name); | 2334 static RawString* NameFromGetter(const String& getter_name); |
2347 static RawString* NameFromSetter(const String& setter_name); | 2335 static RawString* NameFromSetter(const String& setter_name); |
2348 static bool IsGetterName(const String& function_name); | 2336 static bool IsGetterName(const String& function_name); |
2349 static bool IsSetterName(const String& function_name); | 2337 static bool IsSetterName(const String& function_name); |
2350 | 2338 |
(...skipping 4965 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7316 | 7304 |
7317 | 7305 |
7318 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, | 7306 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, |
7319 intptr_t index) { | 7307 intptr_t index) { |
7320 return array.At((index * kEntryLength) + kTargetFunctionIndex); | 7308 return array.At((index * kEntryLength) + kTargetFunctionIndex); |
7321 } | 7309 } |
7322 | 7310 |
7323 } // namespace dart | 7311 } // namespace dart |
7324 | 7312 |
7325 #endif // VM_OBJECT_H_ | 7313 #endif // VM_OBJECT_H_ |
OLD | NEW |