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 RUNTIME_VM_OBJECT_H_ | 5 #ifndef RUNTIME_VM_OBJECT_H_ |
6 #define RUNTIME_VM_OBJECT_H_ | 6 #define RUNTIME_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 2455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2466 case RawFunction::kRegularFunction: | 2466 case RawFunction::kRegularFunction: |
2467 case RawFunction::kGetterFunction: | 2467 case RawFunction::kGetterFunction: |
2468 case RawFunction::kSetterFunction: | 2468 case RawFunction::kSetterFunction: |
2469 case RawFunction::kImplicitGetter: | 2469 case RawFunction::kImplicitGetter: |
2470 case RawFunction::kImplicitSetter: | 2470 case RawFunction::kImplicitSetter: |
2471 case RawFunction::kMethodExtractor: | 2471 case RawFunction::kMethodExtractor: |
2472 case RawFunction::kNoSuchMethodDispatcher: | 2472 case RawFunction::kNoSuchMethodDispatcher: |
2473 case RawFunction::kInvokeFieldDispatcher: | 2473 case RawFunction::kInvokeFieldDispatcher: |
2474 return true; | 2474 return true; |
2475 case RawFunction::kClosureFunction: | 2475 case RawFunction::kClosureFunction: |
| 2476 case RawFunction::kImplicitClosureFunction: |
2476 case RawFunction::kSignatureFunction: | 2477 case RawFunction::kSignatureFunction: |
2477 case RawFunction::kConstructor: | 2478 case RawFunction::kConstructor: |
2478 case RawFunction::kImplicitStaticFinalGetter: | 2479 case RawFunction::kImplicitStaticFinalGetter: |
2479 case RawFunction::kIrregexpFunction: | 2480 case RawFunction::kIrregexpFunction: |
2480 return false; | 2481 return false; |
2481 default: | 2482 default: |
2482 UNREACHABLE(); | 2483 UNREACHABLE(); |
2483 return false; | 2484 return false; |
2484 } | 2485 } |
2485 } | 2486 } |
2486 bool IsStaticFunction() const { | 2487 bool IsStaticFunction() const { |
2487 if (!is_static()) { | 2488 if (!is_static()) { |
2488 return false; | 2489 return false; |
2489 } | 2490 } |
2490 switch (kind()) { | 2491 switch (kind()) { |
2491 case RawFunction::kRegularFunction: | 2492 case RawFunction::kRegularFunction: |
2492 case RawFunction::kGetterFunction: | 2493 case RawFunction::kGetterFunction: |
2493 case RawFunction::kSetterFunction: | 2494 case RawFunction::kSetterFunction: |
2494 case RawFunction::kImplicitGetter: | 2495 case RawFunction::kImplicitGetter: |
2495 case RawFunction::kImplicitSetter: | 2496 case RawFunction::kImplicitSetter: |
2496 case RawFunction::kImplicitStaticFinalGetter: | 2497 case RawFunction::kImplicitStaticFinalGetter: |
2497 case RawFunction::kIrregexpFunction: | 2498 case RawFunction::kIrregexpFunction: |
2498 return true; | 2499 return true; |
2499 case RawFunction::kClosureFunction: | 2500 case RawFunction::kClosureFunction: |
| 2501 case RawFunction::kImplicitClosureFunction: |
2500 case RawFunction::kSignatureFunction: | 2502 case RawFunction::kSignatureFunction: |
2501 case RawFunction::kConstructor: | 2503 case RawFunction::kConstructor: |
2502 case RawFunction::kMethodExtractor: | 2504 case RawFunction::kMethodExtractor: |
2503 case RawFunction::kNoSuchMethodDispatcher: | 2505 case RawFunction::kNoSuchMethodDispatcher: |
2504 case RawFunction::kInvokeFieldDispatcher: | 2506 case RawFunction::kInvokeFieldDispatcher: |
2505 return false; | 2507 return false; |
2506 default: | 2508 default: |
2507 UNREACHABLE(); | 2509 UNREACHABLE(); |
2508 return false; | 2510 return false; |
2509 } | 2511 } |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2766 } | 2768 } |
2767 | 2769 |
2768 // Returns true if this function represents an implicit setter function. | 2770 // Returns true if this function represents an implicit setter function. |
2769 bool IsImplicitSetterFunction() const { | 2771 bool IsImplicitSetterFunction() const { |
2770 return kind() == RawFunction::kImplicitSetter; | 2772 return kind() == RawFunction::kImplicitSetter; |
2771 } | 2773 } |
2772 | 2774 |
2773 // Returns true if this function represents a (possibly implicit) closure | 2775 // Returns true if this function represents a (possibly implicit) closure |
2774 // function. | 2776 // function. |
2775 bool IsClosureFunction() const { | 2777 bool IsClosureFunction() const { |
2776 return kind() == RawFunction::kClosureFunction; | 2778 RawFunction::Kind k = kind(); |
| 2779 return (k == RawFunction::kClosureFunction) || |
| 2780 (k == RawFunction::kImplicitClosureFunction); |
2777 } | 2781 } |
2778 | 2782 |
2779 // Returns true if this function represents a generated irregexp function. | 2783 // Returns true if this function represents a generated irregexp function. |
2780 bool IsIrregexpFunction() const { | 2784 bool IsIrregexpFunction() const { |
2781 return kind() == RawFunction::kIrregexpFunction; | 2785 return kind() == RawFunction::kIrregexpFunction; |
2782 } | 2786 } |
2783 | 2787 |
2784 // Returns true if this function represents an implicit closure function. | 2788 // Returns true if this function represents an implicit closure function. |
2785 bool IsImplicitClosureFunction() const; | 2789 bool IsImplicitClosureFunction() const { |
| 2790 return kind() == RawFunction::kImplicitClosureFunction; |
| 2791 } |
2786 | 2792 |
2787 // Returns true if this function represents a converted closure function. | 2793 // Returns true if this function represents a converted closure function. |
2788 bool IsConvertedClosureFunction() const { | 2794 bool IsConvertedClosureFunction() const { |
2789 return kind() == RawFunction::kConvertedClosureFunction; | 2795 return kind() == RawFunction::kConvertedClosureFunction; |
2790 } | 2796 } |
2791 | 2797 |
2792 // Returns true if this function represents a non implicit closure function. | 2798 // Returns true if this function represents a non implicit closure function. |
2793 bool IsNonImplicitClosureFunction() const { | 2799 bool IsNonImplicitClosureFunction() const { |
2794 return IsClosureFunction() && !IsImplicitClosureFunction(); | 2800 return IsClosureFunction() && !IsImplicitClosureFunction(); |
2795 } | 2801 } |
2796 | 2802 |
2797 // Returns true if this function represents an implicit static closure | 2803 // Returns true if this function represents an implicit static closure |
2798 // function. | 2804 // function. |
2799 bool IsImplicitStaticClosureFunction() const { | 2805 bool IsImplicitStaticClosureFunction() const { |
2800 return is_static() && IsImplicitClosureFunction(); | 2806 return IsImplicitClosureFunction() && is_static(); |
2801 } | 2807 } |
2802 static bool IsImplicitStaticClosureFunction(RawFunction* func); | 2808 static bool IsImplicitStaticClosureFunction(RawFunction* func); |
2803 | 2809 |
2804 // Returns true if this function represents an implicit instance closure | 2810 // Returns true if this function represents an implicit instance closure |
2805 // function. | 2811 // function. |
2806 bool IsImplicitInstanceClosureFunction() const { | 2812 bool IsImplicitInstanceClosureFunction() const { |
2807 return !is_static() && IsImplicitClosureFunction(); | 2813 return IsImplicitClosureFunction() && !is_static(); |
2808 } | 2814 } |
2809 | 2815 |
2810 bool IsConstructorClosureFunction() const; | 2816 bool IsConstructorClosureFunction() const; |
2811 | 2817 |
2812 // Returns true if this function represents a local function. | 2818 // Returns true if this function represents a local function. |
2813 bool IsLocalFunction() const { return parent_function() != Function::null(); } | 2819 bool IsLocalFunction() const { return parent_function() != Function::null(); } |
2814 | 2820 |
2815 // Returns true if this function represents a signature function without code. | 2821 // Returns true if this function represents a signature function without code. |
2816 bool IsSignatureFunction() const { | 2822 bool IsSignatureFunction() const { |
2817 return kind() == RawFunction::kSignatureFunction; | 2823 return kind() == RawFunction::kSignatureFunction; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2869 RawFunction::Kind kind, | 2875 RawFunction::Kind kind, |
2870 bool is_static, | 2876 bool is_static, |
2871 bool is_const, | 2877 bool is_const, |
2872 bool is_abstract, | 2878 bool is_abstract, |
2873 bool is_external, | 2879 bool is_external, |
2874 bool is_native, | 2880 bool is_native, |
2875 const Object& owner, | 2881 const Object& owner, |
2876 TokenPosition token_pos, | 2882 TokenPosition token_pos, |
2877 Heap::Space space = Heap::kOld); | 2883 Heap::Space space = Heap::kOld); |
2878 | 2884 |
| 2885 // Allocates a new Function object representing a closure function |
| 2886 // with given kind - kClosureFunction, kImplicitClosureFunction or |
| 2887 // kConvertedClosureFunction. |
| 2888 static RawFunction* NewClosureFunctionWithKind(RawFunction::Kind kind, |
| 2889 const String& name, |
| 2890 const Function& parent, |
| 2891 TokenPosition token_pos); |
| 2892 |
2879 // Allocates a new Function object representing a closure function. | 2893 // Allocates a new Function object representing a closure function. |
2880 static RawFunction* NewClosureFunction(const String& name, | 2894 static RawFunction* NewClosureFunction(const String& name, |
2881 const Function& parent, | 2895 const Function& parent, |
2882 TokenPosition token_pos); | 2896 TokenPosition token_pos); |
2883 | 2897 |
| 2898 // Allocates a new Function object representing an implicit closure function. |
| 2899 static RawFunction* NewImplicitClosureFunction(const String& name, |
| 2900 const Function& parent, |
| 2901 TokenPosition token_pos); |
| 2902 |
2884 // Allocates a new Function object representing a converted closure function. | 2903 // Allocates a new Function object representing a converted closure function. |
2885 static RawFunction* NewConvertedClosureFunction(const String& name, | 2904 static RawFunction* NewConvertedClosureFunction(const String& name, |
2886 const Function& parent, | 2905 const Function& parent, |
2887 TokenPosition token_pos); | 2906 TokenPosition token_pos); |
2888 | 2907 |
2889 // Allocates a new Function object representing a signature function. | 2908 // Allocates a new Function object representing a signature function. |
2890 // The owner is the scope class of the function type. | 2909 // The owner is the scope class of the function type. |
2891 // The parent is the enclosing function or null if none. | 2910 // The parent is the enclosing function or null if none. |
2892 static RawFunction* NewSignatureFunction(const Object& owner, | 2911 static RawFunction* NewSignatureFunction(const Object& owner, |
2893 const Function& parent, | 2912 const Function& parent, |
(...skipping 6072 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8966 | 8985 |
8967 inline void TypeArguments::SetHash(intptr_t value) const { | 8986 inline void TypeArguments::SetHash(intptr_t value) const { |
8968 // This is only safe because we create a new Smi, which does not cause | 8987 // This is only safe because we create a new Smi, which does not cause |
8969 // heap allocation. | 8988 // heap allocation. |
8970 StoreSmi(&raw_ptr()->hash_, Smi::New(value)); | 8989 StoreSmi(&raw_ptr()->hash_, Smi::New(value)); |
8971 } | 8990 } |
8972 | 8991 |
8973 } // namespace dart | 8992 } // namespace dart |
8974 | 8993 |
8975 #endif // RUNTIME_VM_OBJECT_H_ | 8994 #endif // RUNTIME_VM_OBJECT_H_ |
OLD | NEW |