Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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_KERNEL_H_ | 5 #ifndef RUNTIME_VM_KERNEL_H_ |
| 6 #define RUNTIME_VM_KERNEL_H_ | 6 #define RUNTIME_VM_KERNEL_H_ |
| 7 | 7 |
| 8 #if !defined(DART_PRECOMPILED_RUNTIME) | 8 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
| 10 #include "vm/allocation.h" | 10 #include "vm/allocation.h" |
| 11 #include "vm/globals.h" | 11 #include "vm/globals.h" |
| 12 #include "vm/growable_array.h" | 12 #include "vm/growable_array.h" |
| 13 #include "vm/token_position.h" | 13 #include "vm/token_position.h" |
| 14 | 14 |
| 15 | 15 |
| 16 #define KERNEL_NODES_DO(M) \ | 16 #define KERNEL_NODES_DO(M) \ |
| 17 M(Name) \ | 17 M(Name) \ |
| 18 M(DartType) \ | 18 M(DartType) \ |
| 19 M(InvalidType) \ | 19 M(InvalidType) \ |
| 20 M(DynamicType) \ | 20 M(DynamicType) \ |
| 21 M(VoidType) \ | 21 M(VoidType) \ |
| 22 M(InterfaceType) \ | 22 M(InterfaceType) \ |
| 23 M(FunctionType) \ | 23 M(FunctionType) \ |
| 24 M(TypeParameterType) | 24 M(TypeParameterType) \ |
| 25 M(VectorType) | |
| 25 | 26 |
| 26 #define KERNEL_TREE_NODES_DO(M) \ | 27 #define KERNEL_TREE_NODES_DO(M) \ |
| 27 M(Library) \ | 28 M(Library) \ |
| 28 M(Class) \ | 29 M(Class) \ |
| 29 M(NormalClass) \ | 30 M(NormalClass) \ |
| 30 M(MixinClass) \ | 31 M(MixinClass) \ |
| 31 M(Member) \ | 32 M(Member) \ |
| 32 M(Field) \ | 33 M(Field) \ |
| 33 M(Constructor) \ | 34 M(Constructor) \ |
| 34 M(Procedure) \ | 35 M(Procedure) \ |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 72 M(TypeLiteral) \ | 73 M(TypeLiteral) \ |
| 73 M(ThisExpression) \ | 74 M(ThisExpression) \ |
| 74 M(Rethrow) \ | 75 M(Rethrow) \ |
| 75 M(Throw) \ | 76 M(Throw) \ |
| 76 M(ListLiteral) \ | 77 M(ListLiteral) \ |
| 77 M(MapLiteral) \ | 78 M(MapLiteral) \ |
| 78 M(MapEntry) \ | 79 M(MapEntry) \ |
| 79 M(AwaitExpression) \ | 80 M(AwaitExpression) \ |
| 80 M(FunctionExpression) \ | 81 M(FunctionExpression) \ |
| 81 M(Let) \ | 82 M(Let) \ |
| 83 M(VectorCreation) \ | |
| 84 M(VectorGet) \ | |
| 85 M(VectorSet) \ | |
| 86 M(VectorCopy) \ | |
| 87 M(ClosureCreation) \ | |
| 82 M(Statement) \ | 88 M(Statement) \ |
| 83 M(InvalidStatement) \ | 89 M(InvalidStatement) \ |
| 84 M(ExpressionStatement) \ | 90 M(ExpressionStatement) \ |
| 85 M(Block) \ | 91 M(Block) \ |
| 86 M(EmptyStatement) \ | 92 M(EmptyStatement) \ |
| 87 M(AssertStatement) \ | 93 M(AssertStatement) \ |
| 88 M(LabeledStatement) \ | 94 M(LabeledStatement) \ |
| 89 M(BreakStatement) \ | 95 M(BreakStatement) \ |
| 90 M(WhileStatement) \ | 96 M(WhileStatement) \ |
| 91 M(DoStatement) \ | 97 M(DoStatement) \ |
| (...skipping 1829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1921 | 1927 |
| 1922 Child<VariableDeclaration> variable_; | 1928 Child<VariableDeclaration> variable_; |
| 1923 Child<Expression> body_; | 1929 Child<Expression> body_; |
| 1924 TokenPosition position_; | 1930 TokenPosition position_; |
| 1925 TokenPosition end_position_; | 1931 TokenPosition end_position_; |
| 1926 | 1932 |
| 1927 DISALLOW_COPY_AND_ASSIGN(Let); | 1933 DISALLOW_COPY_AND_ASSIGN(Let); |
| 1928 }; | 1934 }; |
| 1929 | 1935 |
| 1930 | 1936 |
| 1937 class VectorCreation : public Expression { | |
| 1938 public: | |
| 1939 static VectorCreation* ReadFrom(Reader* reader); | |
| 1940 | |
| 1941 virtual ~VectorCreation(); | |
| 1942 | |
| 1943 DEFINE_CASTING_OPERATIONS(VectorCreation); | |
| 1944 | |
| 1945 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | |
| 1946 virtual void VisitChildren(Visitor* visitor); | |
| 1947 | |
| 1948 int64_t value() { return value_; } | |
| 1949 TokenPosition position() { return position_; } | |
| 1950 TokenPosition end_position() { return end_position_; } | |
| 1951 | |
| 1952 private: | |
| 1953 VectorCreation() | |
| 1954 : position_(TokenPosition::kNoSource), | |
| 1955 end_position_(TokenPosition::kNoSource) {} | |
| 1956 | |
| 1957 int64_t value_; | |
|
Kevin Millikin (Google)
2017/04/04 11:29:33
Use intptr_t, here and elsewhere.
Dmitry Stefantsov
2017/04/04 12:51:13
Done.
| |
| 1958 TokenPosition position_; | |
|
Kevin Millikin (Google)
2017/04/04 11:29:34
This does not need a token position or an end toke
Dmitry Stefantsov
2017/04/04 12:51:13
No, I guess not. Thanks! Done.
| |
| 1959 TokenPosition end_position_; | |
| 1960 | |
| 1961 DISALLOW_COPY_AND_ASSIGN(VectorCreation); | |
| 1962 }; | |
| 1963 | |
| 1964 | |
| 1965 class VectorGet : public Expression { | |
| 1966 public: | |
| 1967 static VectorGet* ReadFrom(Reader* reader); | |
| 1968 | |
| 1969 virtual ~VectorGet(); | |
| 1970 | |
| 1971 DEFINE_CASTING_OPERATIONS(VectorGet); | |
| 1972 | |
| 1973 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | |
| 1974 virtual void VisitChildren(Visitor* visitor); | |
| 1975 | |
| 1976 Expression* vector_expression() { return vector_expression_; } | |
| 1977 int64_t index() { return index_; } | |
| 1978 TokenPosition position() { return position_; } | |
| 1979 TokenPosition end_position() { return end_position_; } | |
| 1980 | |
| 1981 private: | |
| 1982 VectorGet() | |
| 1983 : position_(TokenPosition::kNoSource), | |
| 1984 end_position_(TokenPosition::kNoSource) {} | |
| 1985 | |
| 1986 Child<Expression> vector_expression_; | |
|
Kevin Millikin (Google)
2017/04/04 11:29:33
Is it the case that this is always a VariableGet,
Dmitry Stefantsov
2017/04/04 12:51:13
Actually, it's not always VariableGet. In case of
| |
| 1987 int64_t index_; | |
|
Kevin Millikin (Google)
2017/04/04 11:29:34
intptr_t
Dmitry Stefantsov
2017/04/04 12:51:13
Done.
| |
| 1988 TokenPosition position_; | |
|
Kevin Millikin (Google)
2017/04/04 11:29:34
We don't need these token positions.
Dmitry Stefantsov
2017/04/04 12:51:13
I guess we may want these, because they replace va
| |
| 1989 TokenPosition end_position_; | |
| 1990 | |
| 1991 DISALLOW_COPY_AND_ASSIGN(VectorGet); | |
| 1992 }; | |
| 1993 | |
| 1994 | |
| 1995 class VectorSet : public Expression { | |
| 1996 public: | |
| 1997 static VectorSet* ReadFrom(Reader* reader); | |
| 1998 | |
| 1999 virtual ~VectorSet(); | |
| 2000 | |
| 2001 DEFINE_CASTING_OPERATIONS(VectorSet); | |
| 2002 | |
| 2003 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | |
| 2004 virtual void VisitChildren(Visitor* visitor); | |
| 2005 | |
| 2006 Expression* vector_expression() { return vector_expression_; } | |
| 2007 int64_t index() { return index_; } | |
| 2008 Expression* value() { return value_; } | |
| 2009 TokenPosition position() { return position_; } | |
| 2010 TokenPosition end_position() { return end_position_; } | |
| 2011 | |
| 2012 private: | |
| 2013 VectorSet() | |
| 2014 : position_(TokenPosition::kNoSource), | |
| 2015 end_position_(TokenPosition::kNoSource) {} | |
| 2016 | |
| 2017 Child<Expression> vector_expression_; | |
| 2018 int64_t index_; | |
|
Kevin Millikin (Google)
2017/04/04 11:29:33
intptr_t
Dmitry Stefantsov
2017/04/04 12:51:13
Done.
| |
| 2019 Child<Expression> value_; | |
| 2020 TokenPosition position_; | |
|
Kevin Millikin (Google)
2017/04/04 11:29:34
I guess this will need a position and possibly two
Dmitry Stefantsov
2017/04/04 12:51:13
Agree. Done.
| |
| 2021 TokenPosition end_position_; | |
| 2022 | |
| 2023 DISALLOW_COPY_AND_ASSIGN(VectorSet); | |
| 2024 }; | |
| 2025 | |
| 2026 | |
| 2027 class VectorCopy : public Expression { | |
| 2028 public: | |
| 2029 static VectorCopy* ReadFrom(Reader* reader); | |
| 2030 | |
| 2031 virtual ~VectorCopy(); | |
| 2032 | |
| 2033 DEFINE_CASTING_OPERATIONS(VectorCopy); | |
| 2034 | |
| 2035 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | |
| 2036 virtual void VisitChildren(Visitor* visitor); | |
| 2037 | |
| 2038 Expression* vector_expression() { return vector_expression_; } | |
| 2039 TokenPosition position() { return position_; } | |
| 2040 TokenPosition end_position() { return end_position_; } | |
| 2041 | |
| 2042 private: | |
| 2043 VectorCopy() | |
| 2044 : position_(TokenPosition::kNoSource), | |
| 2045 end_position_(TokenPosition::kNoSource) {} | |
| 2046 | |
| 2047 Child<Expression> vector_expression_; | |
| 2048 TokenPosition position_; | |
|
Kevin Millikin (Google)
2017/04/04 11:29:34
We shouldn't need these positions.
Dmitry Stefantsov
2017/04/04 12:51:13
Agree. Done.
| |
| 2049 TokenPosition end_position_; | |
| 2050 | |
| 2051 DISALLOW_COPY_AND_ASSIGN(VectorCopy); | |
| 2052 }; | |
| 2053 | |
| 2054 | |
| 2055 class ClosureCreation : public Expression { | |
| 2056 public: | |
| 2057 static ClosureCreation* ReadFrom(Reader* reader); | |
| 2058 | |
| 2059 virtual ~ClosureCreation(); | |
| 2060 | |
| 2061 DEFINE_CASTING_OPERATIONS(ClosureCreation); | |
| 2062 | |
| 2063 virtual void AcceptExpressionVisitor(ExpressionVisitor* visitor); | |
| 2064 virtual void VisitChildren(Visitor* visitor); | |
| 2065 | |
| 2066 CanonicalName* top_level_function_reference() { | |
|
Kevin Millikin (Google)
2017/04/04 11:29:33
For consistency, we don't usually put _reference i
Dmitry Stefantsov
2017/04/04 12:51:13
Somehow I've missed this convention. Thanks! Fixed
| |
| 2067 return top_level_function_reference_; | |
| 2068 } | |
| 2069 Expression* context_vector() { return context_vector_; } | |
| 2070 FunctionType* function_type() { return function_type_; } | |
| 2071 TokenPosition position() { return position_; } | |
| 2072 TokenPosition end_position() { return end_position_; } | |
| 2073 | |
| 2074 private: | |
| 2075 ClosureCreation() | |
| 2076 : position_(TokenPosition::kNoSource), | |
| 2077 end_position_(TokenPosition::kNoSource) {} | |
| 2078 | |
| 2079 Ref<CanonicalName> top_level_function_reference_; // Procedure. | |
| 2080 Child<Expression> context_vector_; | |
| 2081 Child<FunctionType> function_type_; | |
| 2082 TokenPosition position_; | |
|
Kevin Millikin (Google)
2017/04/04 11:29:34
I don't think we need these positions.
Dmitry Stefantsov
2017/04/04 12:51:13
Done.
| |
| 2083 TokenPosition end_position_; | |
| 2084 | |
| 2085 DISALLOW_COPY_AND_ASSIGN(ClosureCreation); | |
| 2086 }; | |
| 2087 | |
| 2088 | |
| 1931 class Statement : public TreeNode { | 2089 class Statement : public TreeNode { |
| 1932 public: | 2090 public: |
| 1933 static Statement* ReadFrom(Reader* reader); | 2091 static Statement* ReadFrom(Reader* reader); |
| 1934 | 2092 |
| 1935 virtual ~Statement(); | 2093 virtual ~Statement(); |
| 1936 | 2094 |
| 1937 DEFINE_CASTING_OPERATIONS(Statement); | 2095 DEFINE_CASTING_OPERATIONS(Statement); |
| 1938 | 2096 |
| 1939 virtual void AcceptTreeVisitor(TreeVisitor* visitor); | 2097 virtual void AcceptTreeVisitor(TreeVisitor* visitor); |
| 1940 virtual void AcceptStatementVisitor(StatementVisitor* visitor) = 0; | 2098 virtual void AcceptStatementVisitor(StatementVisitor* visitor) = 0; |
| (...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2696 | 2854 |
| 2697 private: | 2855 private: |
| 2698 TypeParameterType() {} | 2856 TypeParameterType() {} |
| 2699 | 2857 |
| 2700 Ref<TypeParameter> parameter_; | 2858 Ref<TypeParameter> parameter_; |
| 2701 | 2859 |
| 2702 DISALLOW_COPY_AND_ASSIGN(TypeParameterType); | 2860 DISALLOW_COPY_AND_ASSIGN(TypeParameterType); |
| 2703 }; | 2861 }; |
| 2704 | 2862 |
| 2705 | 2863 |
| 2864 class VectorType : public DartType { | |
| 2865 public: | |
| 2866 static VectorType* ReadFrom(Reader* reader); | |
| 2867 | |
| 2868 virtual ~VectorType(); | |
| 2869 | |
| 2870 DEFINE_CASTING_OPERATIONS(VectorType); | |
| 2871 | |
| 2872 virtual void AcceptDartTypeVisitor(DartTypeVisitor* visitor); | |
| 2873 virtual void VisitChildren(Visitor* visitor); | |
| 2874 | |
| 2875 private: | |
| 2876 VectorType() {} | |
| 2877 | |
| 2878 DISALLOW_COPY_AND_ASSIGN(VectorType); | |
| 2879 }; | |
| 2880 | |
| 2881 | |
| 2706 class TypeParameter : public TreeNode { | 2882 class TypeParameter : public TreeNode { |
| 2707 public: | 2883 public: |
| 2708 TypeParameter* ReadFrom(Reader* reader); | 2884 TypeParameter* ReadFrom(Reader* reader); |
| 2709 | 2885 |
| 2710 virtual ~TypeParameter(); | 2886 virtual ~TypeParameter(); |
| 2711 | 2887 |
| 2712 DEFINE_CASTING_OPERATIONS(TypeParameter); | 2888 DEFINE_CASTING_OPERATIONS(TypeParameter); |
| 2713 | 2889 |
| 2714 virtual void AcceptTreeVisitor(TreeVisitor* visitor); | 2890 virtual void AcceptTreeVisitor(TreeVisitor* visitor); |
| 2715 virtual void VisitChildren(Visitor* visitor); | 2891 virtual void VisitChildren(Visitor* visitor); |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2869 virtual void VisitDoubleLiteral(DoubleLiteral* node) { | 3045 virtual void VisitDoubleLiteral(DoubleLiteral* node) { |
| 2870 VisitDefaultBasicLiteral(node); | 3046 VisitDefaultBasicLiteral(node); |
| 2871 } | 3047 } |
| 2872 virtual void VisitBoolLiteral(BoolLiteral* node) { | 3048 virtual void VisitBoolLiteral(BoolLiteral* node) { |
| 2873 VisitDefaultBasicLiteral(node); | 3049 VisitDefaultBasicLiteral(node); |
| 2874 } | 3050 } |
| 2875 virtual void VisitNullLiteral(NullLiteral* node) { | 3051 virtual void VisitNullLiteral(NullLiteral* node) { |
| 2876 VisitDefaultBasicLiteral(node); | 3052 VisitDefaultBasicLiteral(node); |
| 2877 } | 3053 } |
| 2878 virtual void VisitLet(Let* node) { VisitDefaultExpression(node); } | 3054 virtual void VisitLet(Let* node) { VisitDefaultExpression(node); } |
| 3055 virtual void VisitVectorCreation(VectorCreation* node) { | |
| 3056 VisitDefaultExpression(node); | |
| 3057 } | |
| 3058 virtual void VisitVectorGet(VectorGet* node) { VisitDefaultExpression(node); } | |
| 3059 virtual void VisitVectorSet(VectorSet* node) { VisitDefaultExpression(node); } | |
| 3060 virtual void VisitVectorCopy(VectorCopy* node) { | |
| 3061 VisitDefaultExpression(node); | |
| 3062 } | |
| 3063 virtual void VisitClosureCreation(ClosureCreation* node) { | |
| 3064 VisitDefaultExpression(node); | |
| 3065 } | |
| 2879 }; | 3066 }; |
| 2880 | 3067 |
| 2881 | 3068 |
| 2882 class StatementVisitor { | 3069 class StatementVisitor { |
| 2883 public: | 3070 public: |
| 2884 virtual ~StatementVisitor() {} | 3071 virtual ~StatementVisitor() {} |
| 2885 | 3072 |
| 2886 virtual void VisitDefaultStatement(Statement* node) = 0; | 3073 virtual void VisitDefaultStatement(Statement* node) = 0; |
| 2887 virtual void VisitInvalidStatement(InvalidStatement* node) { | 3074 virtual void VisitInvalidStatement(InvalidStatement* node) { |
| 2888 VisitDefaultStatement(node); | 3075 VisitDefaultStatement(node); |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3001 virtual void VisitVoidType(VoidType* node) { VisitDefaultDartType(node); } | 3188 virtual void VisitVoidType(VoidType* node) { VisitDefaultDartType(node); } |
| 3002 virtual void VisitInterfaceType(InterfaceType* node) { | 3189 virtual void VisitInterfaceType(InterfaceType* node) { |
| 3003 VisitDefaultDartType(node); | 3190 VisitDefaultDartType(node); |
| 3004 } | 3191 } |
| 3005 virtual void VisitFunctionType(FunctionType* node) { | 3192 virtual void VisitFunctionType(FunctionType* node) { |
| 3006 VisitDefaultDartType(node); | 3193 VisitDefaultDartType(node); |
| 3007 } | 3194 } |
| 3008 virtual void VisitTypeParameterType(TypeParameterType* node) { | 3195 virtual void VisitTypeParameterType(TypeParameterType* node) { |
| 3009 VisitDefaultDartType(node); | 3196 VisitDefaultDartType(node); |
| 3010 } | 3197 } |
| 3198 virtual void VisitVectorType(VectorType* node) { VisitDefaultDartType(node); } | |
| 3011 }; | 3199 }; |
| 3012 | 3200 |
| 3013 | 3201 |
| 3014 class TreeVisitor : public ExpressionVisitor, | 3202 class TreeVisitor : public ExpressionVisitor, |
| 3015 public StatementVisitor, | 3203 public StatementVisitor, |
| 3016 public MemberVisitor, | 3204 public MemberVisitor, |
| 3017 public ClassVisitor, | 3205 public ClassVisitor, |
| 3018 public InitializerVisitor { | 3206 public InitializerVisitor { |
| 3019 public: | 3207 public: |
| 3020 virtual ~TreeVisitor() {} | 3208 virtual ~TreeVisitor() {} |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3146 | 3334 |
| 3147 ParsedFunction* ParseStaticFieldInitializer(Zone* zone, | 3335 ParsedFunction* ParseStaticFieldInitializer(Zone* zone, |
| 3148 const dart::Field& field); | 3336 const dart::Field& field); |
| 3149 | 3337 |
| 3150 } // namespace kernel | 3338 } // namespace kernel |
| 3151 | 3339 |
| 3152 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, | 3340 kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer, |
| 3153 intptr_t buffer_length); | 3341 intptr_t buffer_length); |
| 3154 | 3342 |
| 3155 | 3343 |
| 3156 | |
| 3157 } // namespace dart | 3344 } // namespace dart |
| 3158 | 3345 |
| 3159 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 3346 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| 3160 #endif // RUNTIME_VM_KERNEL_H_ | 3347 #endif // RUNTIME_VM_KERNEL_H_ |
| OLD | NEW |