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

Side by Side Diff: runtime/vm/object.h

Issue 51123003: VM: Fix checked mode crash (issue 13831). (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 1 month 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
OLDNEW
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 1571 matching lines...) Expand 10 before | Expand all | Expand 10 after
1582 case RawFunction::kSetterFunction: 1582 case RawFunction::kSetterFunction:
1583 case RawFunction::kImplicitGetter: 1583 case RawFunction::kImplicitGetter:
1584 case RawFunction::kImplicitSetter: 1584 case RawFunction::kImplicitSetter:
1585 case RawFunction::kMethodExtractor: 1585 case RawFunction::kMethodExtractor:
1586 case RawFunction::kNoSuchMethodDispatcher: 1586 case RawFunction::kNoSuchMethodDispatcher:
1587 case RawFunction::kInvokeFieldDispatcher: 1587 case RawFunction::kInvokeFieldDispatcher:
1588 return true; 1588 return true;
1589 case RawFunction::kClosureFunction: 1589 case RawFunction::kClosureFunction:
1590 case RawFunction::kConstructor: 1590 case RawFunction::kConstructor:
1591 case RawFunction::kImplicitStaticFinalGetter: 1591 case RawFunction::kImplicitStaticFinalGetter:
1592 case RawFunction::kStaticInitializer:
1592 return false; 1593 return false;
1593 default: 1594 default:
1594 UNREACHABLE(); 1595 UNREACHABLE();
1595 return false; 1596 return false;
1596 } 1597 }
1597 } 1598 }
1598 bool IsStaticFunction() const { 1599 bool IsStaticFunction() const {
1599 if (!is_static()) { 1600 if (!is_static()) {
1600 return false; 1601 return false;
1601 } 1602 }
1602 switch (kind()) { 1603 switch (kind()) {
1603 case RawFunction::kRegularFunction: 1604 case RawFunction::kRegularFunction:
1604 case RawFunction::kGetterFunction: 1605 case RawFunction::kGetterFunction:
1605 case RawFunction::kSetterFunction: 1606 case RawFunction::kSetterFunction:
1606 case RawFunction::kImplicitGetter: 1607 case RawFunction::kImplicitGetter:
1607 case RawFunction::kImplicitSetter: 1608 case RawFunction::kImplicitSetter:
1608 case RawFunction::kImplicitStaticFinalGetter: 1609 case RawFunction::kImplicitStaticFinalGetter:
1610 case RawFunction::kStaticInitializer:
1609 return true; 1611 return true;
1610 case RawFunction::kClosureFunction: 1612 case RawFunction::kClosureFunction:
1611 case RawFunction::kConstructor: 1613 case RawFunction::kConstructor:
1612 return false; 1614 return false;
1613 default: 1615 default:
1614 UNREACHABLE(); 1616 UNREACHABLE();
1615 return false; 1617 return false;
1616 } 1618 }
1617 } 1619 }
1618 bool IsInFactoryScope() const; 1620 bool IsInFactoryScope() const;
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
1802 // Returns true if this function represents an explicit setter function. 1804 // Returns true if this function represents an explicit setter function.
1803 bool IsSetterFunction() const { 1805 bool IsSetterFunction() const {
1804 return kind() == RawFunction::kSetterFunction; 1806 return kind() == RawFunction::kSetterFunction;
1805 } 1807 }
1806 1808
1807 // Returns true if this function represents an implicit setter function. 1809 // Returns true if this function represents an implicit setter function.
1808 bool IsImplicitSetterFunction() const { 1810 bool IsImplicitSetterFunction() const {
1809 return kind() == RawFunction::kImplicitSetter; 1811 return kind() == RawFunction::kImplicitSetter;
1810 } 1812 }
1811 1813
1814 // Returns true if this function represents an static initializer function.
1815 bool IsStaticInitializerFunction() const {
1816 return kind() == RawFunction::kStaticInitializer;
1817 }
1818
1812 // Returns true if this function represents a (possibly implicit) closure 1819 // Returns true if this function represents a (possibly implicit) closure
1813 // function. 1820 // function.
1814 bool IsClosureFunction() const { 1821 bool IsClosureFunction() const {
1815 return kind() == RawFunction::kClosureFunction; 1822 return kind() == RawFunction::kClosureFunction;
1816 } 1823 }
1817 1824
1818 // Returns true if this function represents an implicit closure function. 1825 // Returns true if this function represents an implicit closure function.
1819 bool IsImplicitClosureFunction() const; 1826 bool IsImplicitClosureFunction() const;
1820 1827
1821 // Returns true if this function represents a non implicit closure function. 1828 // Returns true if this function represents a non implicit closure function.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1860 intptr_t token_pos); 1867 intptr_t token_pos);
1861 1868
1862 // Allocates a new Function object representing a closure function, as well as 1869 // Allocates a new Function object representing a closure function, as well as
1863 // a new associated Class object representing the signature class of the 1870 // a new associated Class object representing the signature class of the
1864 // function. 1871 // function.
1865 // The function and the class share the same given name. 1872 // The function and the class share the same given name.
1866 static RawFunction* NewClosureFunction(const String& name, 1873 static RawFunction* NewClosureFunction(const String& name,
1867 const Function& parent, 1874 const Function& parent,
1868 intptr_t token_pos); 1875 intptr_t token_pos);
1869 1876
1877 // Creates a new static initializer function which is invoked in the implicit
1878 // static getter function.
1879 static RawFunction* NewStaticInitializer(const String& field_name,
1880 const AbstractType& result_type,
1881 const Class& cls,
1882 intptr_t token_pos);
1883
1870 // Allocate new function object, clone values from this function. The 1884 // Allocate new function object, clone values from this function. The
1871 // owner of the clone is new_owner. 1885 // owner of the clone is new_owner.
1872 RawFunction* Clone(const Class& new_owner) const; 1886 RawFunction* Clone(const Class& new_owner) const;
1873 1887
1874 // Slow function, use in asserts to track changes in important library 1888 // Slow function, use in asserts to track changes in important library
1875 // functions. 1889 // functions.
1876 int32_t SourceFingerprint() const; 1890 int32_t SourceFingerprint() const;
1877 1891
1878 // Return false and report an error if the fingerprint does not match. 1892 // Return false and report an error if the fingerprint does not match.
1879 bool CheckSourceFingerprint(int32_t fp) const; 1893 bool CheckSourceFingerprint(int32_t fp) const;
(...skipping 4416 matching lines...) Expand 10 before | Expand all | Expand 10 after
6296 6310
6297 6311
6298 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, 6312 RawObject* MegamorphicCache::GetTargetFunction(const Array& array,
6299 intptr_t index) { 6313 intptr_t index) {
6300 return array.At((index * kEntryLength) + kTargetFunctionIndex); 6314 return array.At((index * kEntryLength) + kTargetFunctionIndex);
6301 } 6315 }
6302 6316
6303 } // namespace dart 6317 } // namespace dart
6304 6318
6305 #endif // VM_OBJECT_H_ 6319 #endif // VM_OBJECT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698