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

Side by Side Diff: src/ast/ast.h

Issue 1810943002: Add parsing for tuple types (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@types
Patch Set: More test refactoring and minor fixes Created 4 years, 9 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
« no previous file with comments | « no previous file | src/parsing/parser.h » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_AST_AST_H_ 5 #ifndef V8_AST_AST_H_
6 #define V8_AST_AST_H_ 6 #define V8_AST_AST_H_
7 7
8 #include "src/assembler.h" 8 #include "src/assembler.h"
9 #include "src/ast/ast-value-factory.h" 9 #include "src/ast/ast-value-factory.h"
10 #include "src/ast/modules.h" 10 #include "src/ast/modules.h"
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 EXPRESSION_NODE_LIST(V) 99 EXPRESSION_NODE_LIST(V)
100 100
101 // Optional type nodes are intentionally not in in AST_NODE_LIST. 101 // Optional type nodes are intentionally not in in AST_NODE_LIST.
102 // Visitors should not have to worry about them. 102 // Visitors should not have to worry about them.
103 #define TYPESYSTEM_NODE_LIST(V) \ 103 #define TYPESYSTEM_NODE_LIST(V) \
104 V(PredefinedType) \ 104 V(PredefinedType) \
105 V(ThisType) \ 105 V(ThisType) \
106 V(UnionType) \ 106 V(UnionType) \
107 V(IntersectionType) \ 107 V(IntersectionType) \
108 V(ArrayType) \ 108 V(ArrayType) \
109 V(TupleType) \
109 V(FunctionType) \ 110 V(FunctionType) \
110 V(TypeParameter) \ 111 V(TypeParameter) \
111 V(FormalParameter) \ 112 V(FormalParameter) \
112 V(TypeReference) \ 113 V(TypeReference) \
113 V(StringLiteralType) \ 114 V(StringLiteralType) \
114 V(QueryType) \ 115 V(QueryType) \
115 V(TypeOrParameters) 116 V(TypeOrParameters)
116 117
117 // Forward declarations 118 // Forward declarations
118 class AstNodeFactory; 119 class AstNodeFactory;
(...skipping 2809 matching lines...) Expand 10 before | Expand all | Expand 10 after
2928 private: 2929 private:
2929 EmptyParentheses(Zone* zone, int pos) : Expression(zone, pos) {} 2930 EmptyParentheses(Zone* zone, int pos) : Expression(zone, pos) {}
2930 }; 2931 };
2931 2932
2932 2933
2933 // Nodes for the optional type system. 2934 // Nodes for the optional type system.
2934 namespace typesystem { 2935 namespace typesystem {
2935 2936
2936 class FormalParameter; 2937 class FormalParameter;
2937 2938
2939
2940 // Abstract class for all types.
2941 // It also covers: binding identifiers, binding (array and object) patterns
2942 // and formal parameter lists.
2938 class Type : public AstNode { 2943 class Type : public AstNode {
2939 public: 2944 public:
2940 // Uncovers the case of a single, parenthesized valid type. 2945 // Uncovers the case of a single, parenthesized valid type.
2941 V8_INLINE Type* Uncover(bool* ok); 2946 V8_INLINE Type* Uncover(bool* ok);
2942 2947
2943 V8_INLINE ZoneList<FormalParameter*>* AsValidParameterList(Zone* zone, 2948 V8_INLINE ZoneList<FormalParameter*>* AsValidParameterList(Zone* zone,
2944 bool* ok) const; 2949 bool* ok) const;
2945 2950
2946 V8_INLINE bool IsSimpleIdentifier() const; 2951 V8_INLINE bool IsValidType() const;
2947 V8_INLINE const AstRawString* AsSimpleIdentifier() const; 2952 V8_INLINE bool IsValidBindingIdentifierOrPattern() const;
2948 2953
2949 protected: 2954 protected:
2950 explicit Type(Zone* zone, int position) : AstNode(position) {} 2955 explicit Type(Zone* zone, int position) : AstNode(position) {}
2951 }; 2956 };
2952 2957
2953 2958
2959 // Class for predefined types.
2960 // It also covers the use of "number", "any", etc. when used as binding
2961 // identifiers.
2954 class PredefinedType : public Type { 2962 class PredefinedType : public Type {
2955 public: 2963 public:
2956 DECLARE_NODE_TYPE(PredefinedType) 2964 DECLARE_NODE_TYPE(PredefinedType)
2957 2965
2958 enum Kind { 2966 enum Kind {
2959 kAnyType, 2967 kAnyType,
2960 kNumberType, 2968 kNumberType,
2961 kBooleanType, 2969 kBooleanType,
2962 kStringType, 2970 kStringType,
2963 kSymbolType, 2971 kSymbolType,
2964 kVoidType 2972 kVoidType
2965 }; 2973 };
2966 2974
2967 Kind kind() const { return kind_; } 2975 Kind kind() const { return kind_; }
2976 bool IsValidBindingIdentifier() const { return kind_ != kVoidType; }
2968 2977
2969 protected: 2978 protected:
2970 PredefinedType(Zone* zone, Kind kind, int pos) 2979 PredefinedType(Zone* zone, Kind kind, int pos)
2971 : Type(zone, pos), kind_(kind) {} 2980 : Type(zone, pos), kind_(kind) {}
2972 2981
2973 private: 2982 private:
2974 Kind kind_; 2983 Kind kind_;
2975 }; 2984 };
2976 2985
2977 2986
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
3025 Type* base() const { return base_; } 3034 Type* base() const { return base_; }
3026 3035
3027 protected: 3036 protected:
3028 ArrayType(Zone* zone, Type* base, int pos) : Type(zone, pos), base_(base) {} 3037 ArrayType(Zone* zone, Type* base, int pos) : Type(zone, pos), base_(base) {}
3029 3038
3030 private: 3039 private:
3031 Type* base_; 3040 Type* base_;
3032 }; 3041 };
3033 3042
3034 3043
3044 // Class for tuple type.
3045 // It also covers binding array patterns.
3046 class TupleType : public Type {
3047 public:
3048 DECLARE_NODE_TYPE(TupleType)
3049
3050 ZoneList<Type*>* elements() const { return elements_; }
3051 bool IsValidType() const { return valid_type_; }
3052 bool IsValidBindingPattern() const { return valid_binder_; }
3053 bool spread() const { return spread_; }
3054
3055 protected:
3056 TupleType(Zone* zone, ZoneList<Type*>* elements, bool valid_type,
3057 bool valid_binder, bool spread, int pos)
3058 : Type(zone, pos),
3059 elements_(elements),
3060 valid_type_(valid_type),
3061 valid_binder_(valid_binder),
3062 spread_(spread) {}
3063
3064 private:
3065 ZoneList<Type*>* elements_;
3066 bool valid_type_;
3067 bool valid_binder_;
3068 bool spread_;
3069 };
3070
3071
3035 class TypeParameter : public AstNode { 3072 class TypeParameter : public AstNode {
3036 public: 3073 public:
3037 DECLARE_NODE_TYPE(TypeParameter) 3074 DECLARE_NODE_TYPE(TypeParameter)
3038 3075
3039 const AstRawString* name() const { return name_; } 3076 const AstRawString* name() const { return name_; }
3040 Type* extends() const { return extends_; } 3077 Type* extends() const { return extends_; }
3041 3078
3042 protected: 3079 protected:
3043 TypeParameter(Zone* zone, const AstRawString* name, Type* extends, int pos) 3080 TypeParameter(Zone* zone, const AstRawString* name, Type* extends, int pos)
3044 : AstNode(pos), name_(name), extends_(extends) {} 3081 : AstNode(pos), name_(name), extends_(extends) {}
3045 3082
3046 private: 3083 private:
3047 const AstRawString* name_; 3084 const AstRawString* name_;
3048 Type* extends_; 3085 Type* extends_;
3049 }; 3086 };
3050 3087
3088
3089 // Class for function parameters.
3090 // It also covers types when they occur inside parentheses.
3051 class FormalParameter : public AstNode { 3091 class FormalParameter : public AstNode {
3052 public: 3092 public:
3053 DECLARE_NODE_TYPE(FormalParameter) 3093 DECLARE_NODE_TYPE(FormalParameter)
3054 3094
3055 bool IsValidType() const { return name_ == nullptr; } 3095 bool IsValidType() const {
3096 return binder_ == nullptr && type_->IsValidType();
3097 }
3056 3098
3057 void MakeValidParameter(bool* ok) { 3099 void MakeValidParameter(bool* ok) {
3058 if (name_ != nullptr) return; 3100 if (binder_ != nullptr) return;
3059 if (optional_ || spread_ || !type_->IsSimpleIdentifier()) { 3101 if (optional_ || spread_ || !type_->IsValidBindingIdentifierOrPattern()) {
3060 *ok = false; 3102 *ok = false;
3061 return; 3103 return;
3062 } 3104 }
3063 name_ = type_->AsSimpleIdentifier(); 3105 binder_ = type_;
3064 type_ = nullptr; 3106 type_ = nullptr;
3065 } 3107 }
3066 3108
3067 const AstRawString* name() const { return name_; } 3109 Type* binder() const { return binder_; }
3068 bool optional() const { return optional_; } 3110 bool optional() const { return optional_; }
3069 bool spread() const { return spread_; } 3111 bool spread() const { return spread_; }
3070 Type* type() const { return type_; } 3112 Type* type() const { return type_; }
3071 3113
3072 protected: 3114 protected:
3073 FormalParameter(Zone* zone, const AstRawString* name, bool optional, 3115 FormalParameter(Zone* zone, Type* binder, bool optional, bool spread,
3074 bool spread, Type* type, int pos) 3116 Type* type, int pos)
3075 : AstNode(pos), 3117 : AstNode(pos),
3076 name_(name), 3118 binder_(binder),
3077 optional_(optional), 3119 optional_(optional),
3078 spread_(spread), 3120 spread_(spread),
3079 type_(type) {} 3121 type_(type) {}
3080 FormalParameter(Zone* zone, Type* type, int pos) 3122 FormalParameter(Zone* zone, Type* type, int pos)
3081 : AstNode(pos), 3123 : AstNode(pos),
3082 name_(nullptr), 3124 binder_(nullptr),
3083 optional_(false), 3125 optional_(false),
3084 spread_(false), 3126 spread_(false),
3085 type_(type) {} 3127 type_(type) {}
3086 3128
3087 friend class Type; 3129 friend class Type;
3088 3130
3089 private: 3131 private:
3090 const AstRawString* name_; 3132 Type* binder_;
3091 bool optional_; 3133 bool optional_;
3092 bool spread_; 3134 bool spread_;
3093 Type* type_; 3135 Type* type_;
3094 }; 3136 };
3095 3137
3096 3138
3139 // Class for function and constructor types.
3097 class FunctionType : public Type { 3140 class FunctionType : public Type {
3098 public: 3141 public:
3099 DECLARE_NODE_TYPE(FunctionType) 3142 DECLARE_NODE_TYPE(FunctionType)
3100 3143
3101 bool IsConstructorType() const { return constructor_; } 3144 bool IsConstructorType() const { return constructor_; }
3102 ZoneList<TypeParameter*>* type_parameters() const { return type_parameters_; } 3145 ZoneList<TypeParameter*>* type_parameters() const { return type_parameters_; }
3103 ZoneList<FormalParameter*>* parameters() const { return parameters_; } 3146 ZoneList<FormalParameter*>* parameters() const { return parameters_; }
3104 Type* result_type() const { return result_type_; } 3147 Type* result_type() const { return result_type_; }
3105 3148
3106 protected: 3149 protected:
3107 FunctionType(Zone* zone, ZoneList<TypeParameter*>* type_parameters, 3150 FunctionType(Zone* zone, ZoneList<TypeParameter*>* type_parameters,
3108 ZoneList<FormalParameter*>* parameters, Type* result_type, 3151 ZoneList<FormalParameter*>* parameters, Type* result_type,
3109 int pos, bool constructor = false) 3152 int pos, bool constructor = false)
3110 : Type(zone, pos), 3153 : Type(zone, pos),
3111 type_parameters_(type_parameters), 3154 type_parameters_(type_parameters),
3112 parameters_(parameters), 3155 parameters_(parameters),
3113 result_type_(result_type), 3156 result_type_(result_type),
3114 constructor_(constructor) {} 3157 constructor_(constructor) {}
3115 3158
3116 private: 3159 private:
3117 ZoneList<TypeParameter*>* type_parameters_; 3160 ZoneList<TypeParameter*>* type_parameters_;
3118 ZoneList<FormalParameter*>* parameters_; 3161 ZoneList<FormalParameter*>* parameters_;
3119 Type* result_type_; 3162 Type* result_type_;
3120 bool constructor_; 3163 bool constructor_;
3121 }; 3164 };
3122 3165
3123 3166
3167 // Class for type references.
3168 // It also covers binding identifiers.
3124 class TypeReference : public Type { 3169 class TypeReference : public Type {
3125 public: 3170 public:
3126 DECLARE_NODE_TYPE(TypeReference) 3171 DECLARE_NODE_TYPE(TypeReference)
3127 3172
3128 const AstRawString* name() const { return name_; } 3173 const AstRawString* name() const { return name_; }
3129 ZoneList<Type*>* type_arguments() const { return type_arguments_; } 3174 ZoneList<Type*>* type_arguments() const { return type_arguments_; }
3130 3175
3176 bool IsValidBindingIdentifier() const {
3177 // TODO(nikolaos): This should probably exclude restricted identifiers.
3178 return type_arguments() == nullptr;
3179 }
3180
3131 protected: 3181 protected:
3132 TypeReference(Zone* zone, const AstRawString* name, 3182 TypeReference(Zone* zone, const AstRawString* name,
3133 ZoneList<Type*>* type_arguments, int pos) 3183 ZoneList<Type*>* type_arguments, int pos)
3134 : Type(zone, pos), name_(name), type_arguments_(type_arguments) {} 3184 : Type(zone, pos), name_(name), type_arguments_(type_arguments) {}
3135 3185
3136 private: 3186 private:
3137 const AstRawString* name_; 3187 const AstRawString* name_;
3138 ZoneList<Type*>* type_arguments_; 3188 ZoneList<Type*>* type_arguments_;
3139 }; 3189 };
3140 3190
(...skipping 26 matching lines...) Expand all
3167 QueryType(Zone* zone, const AstRawString* name, 3217 QueryType(Zone* zone, const AstRawString* name,
3168 ZoneList<const AstRawString*>* property_names, int pos) 3218 ZoneList<const AstRawString*>* property_names, int pos)
3169 : Type(zone, pos), name_(name), property_names_(property_names) {} 3219 : Type(zone, pos), name_(name), property_names_(property_names) {}
3170 3220
3171 private: 3221 private:
3172 const AstRawString* name_; 3222 const AstRawString* name_;
3173 ZoneList<const AstRawString*>* property_names_; 3223 ZoneList<const AstRawString*>* property_names_;
3174 }; 3224 };
3175 3225
3176 3226
3227 // Class that covers parenthesized types and formal parameter lists.
3177 class TypeOrParameters : public Type { 3228 class TypeOrParameters : public Type {
3178 public: 3229 public:
3179 DECLARE_NODE_TYPE(TypeOrParameters) 3230 DECLARE_NODE_TYPE(TypeOrParameters)
3180 3231
3181 ZoneList<FormalParameter*>* parameters() const { return parameters_; } 3232 ZoneList<FormalParameter*>* parameters() const { return parameters_; }
3182 3233
3183 protected: 3234 protected:
3184 TypeOrParameters(Zone* zone, ZoneList<FormalParameter*>* parameters, int pos) 3235 TypeOrParameters(Zone* zone, ZoneList<FormalParameter*>* parameters, int pos)
3185 : Type(zone, pos), parameters_(parameters) {} 3236 : Type(zone, pos), parameters_(parameters) {}
3186 3237
3187 private: 3238 private:
3188 ZoneList<FormalParameter*>* parameters_; 3239 ZoneList<FormalParameter*>* parameters_;
3189 }; 3240 };
3190 3241
3191 V8_INLINE bool Type::IsSimpleIdentifier() const { 3242
3192 const TypeReference* ref = AsTypeReference(); 3243 V8_INLINE bool Type::IsValidType() const {
3193 if (ref == nullptr) return false; 3244 if (IsTypeOrParameters()) {
3194 return ref->type_arguments() == nullptr; 3245 ZoneList<FormalParameter*>* parameters = AsTypeOrParameters()->parameters();
3246 return parameters->length() == 1 && parameters->at(0)->IsValidType();
3247 }
3248 if (IsTupleType()) return AsTupleType()->IsValidType();
3249 return true;
3195 } 3250 }
3196 3251
3197 V8_INLINE const AstRawString* Type::AsSimpleIdentifier() const { 3252 V8_INLINE bool Type::IsValidBindingIdentifierOrPattern() const {
3198 const TypeReference* ref = AsTypeReference(); 3253 if (IsTypeReference()) return AsTypeReference()->IsValidBindingIdentifier();
3199 DCHECK_NOT_NULL(ref); 3254 if (IsTupleType()) return AsTupleType()->IsValidBindingPattern();
3200 DCHECK_NULL(ref->type_arguments()); 3255 if (IsPredefinedType()) return AsPredefinedType()->IsValidBindingIdentifier();
3201 return ref->name(); 3256 return false;
3202 } 3257 }
3203 3258
3204 V8_INLINE Type* Type::Uncover(bool* ok) { 3259 V8_INLINE Type* Type::Uncover(bool* ok) {
3205 if (!IsTypeOrParameters()) return this; 3260 if (IsTypeOrParameters()) {
3206 ZoneList<FormalParameter*>* parameters = AsTypeOrParameters()->parameters(); 3261 ZoneList<FormalParameter*>* parameters = AsTypeOrParameters()->parameters();
3207 if (parameters->length() == 1 && parameters->at(0)->IsValidType()) 3262 if (parameters->length() == 1 && parameters->at(0)->IsValidType())
3208 return parameters->at(0)->type(); 3263 return parameters->at(0)->type();
3264 } else if (IsTupleType()) {
3265 if (AsTupleType()->IsValidType()) return this;
3266 } else {
3267 return this;
3268 }
3209 *ok = false; 3269 *ok = false;
3210 return nullptr; 3270 return nullptr;
3211 } 3271 }
3212 3272
3213 V8_INLINE ZoneList<FormalParameter*>* Type::AsValidParameterList( 3273 V8_INLINE ZoneList<FormalParameter*>* Type::AsValidParameterList(
3214 Zone* zone, bool* ok) const { 3274 Zone* zone, bool* ok) const {
3215 if (!IsTypeOrParameters()) { 3275 if (!IsTypeOrParameters()) {
3216 *ok = false; 3276 *ok = false;
3217 return nullptr; 3277 return nullptr;
3218 } 3278 }
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after
3790 typesystem::Type* right, 3850 typesystem::Type* right,
3791 int pos) { 3851 int pos) {
3792 return new (local_zone_) 3852 return new (local_zone_)
3793 typesystem::IntersectionType(local_zone_, left, right, pos); 3853 typesystem::IntersectionType(local_zone_, left, right, pos);
3794 } 3854 }
3795 3855
3796 typesystem::ArrayType* NewArrayType(typesystem::Type* base, int pos) { 3856 typesystem::ArrayType* NewArrayType(typesystem::Type* base, int pos) {
3797 return new (local_zone_) typesystem::ArrayType(local_zone_, base, pos); 3857 return new (local_zone_) typesystem::ArrayType(local_zone_, base, pos);
3798 } 3858 }
3799 3859
3860 typesystem::TupleType* NewTupleType(ZoneList<typesystem::Type*>* elements,
3861 bool valid_type, bool valid_binder,
3862 bool spread, int pos) {
3863 return new (local_zone_) typesystem::TupleType(
3864 local_zone_, elements, valid_type, valid_binder, spread, pos);
3865 }
3866
3800 typesystem::FunctionType* NewFunctionType( 3867 typesystem::FunctionType* NewFunctionType(
3801 ZoneList<typesystem::TypeParameter*>* type_parameters, 3868 ZoneList<typesystem::TypeParameter*>* type_parameters,
3802 ZoneList<typesystem::FormalParameter*>* parameters, 3869 ZoneList<typesystem::FormalParameter*>* parameters,
3803 typesystem::Type* result_type, int pos, bool constructor = false) { 3870 typesystem::Type* result_type, int pos, bool constructor = false) {
3804 return new (local_zone_) 3871 return new (local_zone_)
3805 typesystem::FunctionType(local_zone_, type_parameters, parameters, 3872 typesystem::FunctionType(local_zone_, type_parameters, parameters,
3806 result_type, pos, constructor); 3873 result_type, pos, constructor);
3807 } 3874 }
3808 3875
3809 typesystem::TypeReference* NewTypeReference( 3876 typesystem::TypeReference* NewTypeReference(
3810 const AstRawString* name, ZoneList<typesystem::Type*>* type_arguments, 3877 const AstRawString* name, ZoneList<typesystem::Type*>* type_arguments,
3811 int pos) { 3878 int pos) {
3812 return new (local_zone_) 3879 return new (local_zone_)
3813 typesystem::TypeReference(local_zone_, name, type_arguments, pos); 3880 typesystem::TypeReference(local_zone_, name, type_arguments, pos);
3814 } 3881 }
3815 3882
3816 typesystem::StringLiteralType* NewStringLiteralType( 3883 typesystem::StringLiteralType* NewStringLiteralType(
3817 const AstRawString* string, int pos) { 3884 const AstRawString* string, int pos) {
3818 return new (local_zone_) 3885 return new (local_zone_)
3819 typesystem::StringLiteralType(local_zone_, string, pos); 3886 typesystem::StringLiteralType(local_zone_, string, pos);
3820 } 3887 }
3821 3888
3822 typesystem::QueryType* NewQueryType( 3889 typesystem::QueryType* NewQueryType(
3823 const AstRawString* name, ZoneList<const AstRawString*>* property_names, 3890 const AstRawString* name, ZoneList<const AstRawString*>* property_names,
3824 int pos) { 3891 int pos) {
3825 return new (local_zone_) 3892 return new (local_zone_)
3826 typesystem::QueryType(local_zone_, name, property_names, pos); 3893 typesystem::QueryType(local_zone_, name, property_names, pos);
3827 } 3894 }
3828 3895
3829 typesystem::FormalParameter* NewFormalParameter(const AstRawString* name, 3896 typesystem::FormalParameter* NewFormalParameter(typesystem::Type* binder,
3830 bool optional, bool spread, 3897 bool optional, bool spread,
3831 typesystem::Type* type, 3898 typesystem::Type* type,
3832 int pos) { 3899 int pos) {
3833 return new (local_zone_) typesystem::FormalParameter( 3900 return new (local_zone_) typesystem::FormalParameter(
3834 local_zone_, name, optional, spread, type, pos); 3901 local_zone_, binder, optional, spread, type, pos);
3835 } 3902 }
3836 3903
3837 typesystem::FormalParameter* NewFormalParameter(typesystem::Type* type, 3904 typesystem::FormalParameter* NewFormalParameter(typesystem::Type* type,
3838 int pos) { 3905 int pos) {
3839 return new (local_zone_) 3906 return new (local_zone_)
3840 typesystem::FormalParameter(local_zone_, type, pos); 3907 typesystem::FormalParameter(local_zone_, type, pos);
3841 } 3908 }
3842 3909
3843 typesystem::TypeOrParameters* NewTypeOrParameters( 3910 typesystem::TypeOrParameters* NewTypeOrParameters(
3844 ZoneList<typesystem::FormalParameter*>* parameters, int pos) { 3911 ZoneList<typesystem::FormalParameter*>* parameters, int pos) {
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
3938 : NULL; \ 4005 : NULL; \
3939 } 4006 }
3940 TYPESYSTEM_NODE_LIST(DECLARE_NODE_FUNCTIONS) 4007 TYPESYSTEM_NODE_LIST(DECLARE_NODE_FUNCTIONS)
3941 #undef DECLARE_NODE_FUNCTIONS 4008 #undef DECLARE_NODE_FUNCTIONS
3942 4009
3943 4010
3944 } // namespace internal 4011 } // namespace internal
3945 } // namespace v8 4012 } // namespace v8
3946 4013
3947 #endif // V8_AST_AST_H_ 4014 #endif // V8_AST_AST_H_
OLDNEW
« no previous file with comments | « no previous file | src/parsing/parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698