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

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

Issue 2973633002: [kernel] Change how TypeParameterType is calculated. (Closed)
Patch Set: Created 3 years, 5 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
OLDNEW
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_TO_IL_H_ 5 #ifndef RUNTIME_VM_KERNEL_TO_IL_H_
6 #define RUNTIME_VM_KERNEL_TO_IL_H_ 6 #define RUNTIME_VM_KERNEL_TO_IL_H_
7 7
8 #if !defined(DART_PRECOMPILED_RUNTIME) 8 #if !defined(DART_PRECOMPILED_RUNTIME)
9 9
10 #include "vm/growable_array.h" 10 #include "vm/growable_array.h"
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 }; 187 };
188 188
189 Fragment operator+(const Fragment& first, const Fragment& second); 189 Fragment operator+(const Fragment& first, const Fragment& second);
190 Fragment operator<<(const Fragment& fragment, Instruction* next); 190 Fragment operator<<(const Fragment& fragment, Instruction* next);
191 191
192 typedef ZoneGrowableArray<PushArgumentInstr*>* ArgumentArray; 192 typedef ZoneGrowableArray<PushArgumentInstr*>* ArgumentArray;
193 193
194 194
195 class ActiveClass { 195 class ActiveClass {
196 public: 196 public:
197 ActiveClass() 197 ActiveClass() : klass(NULL), member(NULL) {}
198 : kernel_class(NULL),
199 class_type_parameters(0),
200 class_type_parameters_offset_start(-1),
201 klass(NULL),
202 member_is_procedure(false),
203 member_is_factory_procedure(false),
204 member_type_parameters(0),
205 member_type_parameters_offset_start(-1) {}
206 198
207 // The current enclosing kernel class (if available, otherwise NULL). 199 bool MemberIsProcedure() {
208 Class* kernel_class; 200 if (member == NULL) return false;
209 intptr_t class_type_parameters; 201 RawFunction::Kind function_kind = member->kind();
210 intptr_t class_type_parameters_offset_start; 202 return function_kind == RawFunction::kRegularFunction ||
203 function_kind == RawFunction::kGetterFunction ||
204 function_kind == RawFunction::kSetterFunction ||
205 function_kind == RawFunction::kMethodExtractor ||
206 member->IsFactory();
207 }
211 208
212 // The current enclosing class (or the library top-level class). When this is 209 bool MemberIsFactoryProcedure() {
213 // a library's top-level class, the kernel_class will be NULL. 210 if (member == NULL) return false;
211 return member->IsFactory();
212 }
213
214 intptr_t MemberTypeParameterCount(Zone* zone) {
215 if (member == NULL) return 0;
216 RawFunction::Kind function_kind = member->kind();
217 if (member->IsFactory()) {
218 TypeArguments& class_types =
219 dart::TypeArguments::Handle(zone, klass->type_parameters());
220 return class_types.Length();
221 } else if (function_kind == RawFunction::kMethodExtractor) {
222 Function& extracted =
223 Function::Handle(zone, member->extracted_method_closure());
224 TypeArguments& function_types =
225 dart::TypeArguments::Handle(zone, extracted.type_parameters());
226 return function_types.Length();
227 } else {
228 TypeArguments& function_types =
229 dart::TypeArguments::Handle(zone, member->type_parameters());
230 return function_types.Length();
231 }
232 }
233
234 intptr_t ClassTypeParameterCount(Zone* zone) {
235 if (klass == NULL) return 0;
236 TypeArguments& class_types =
237 dart::TypeArguments::Handle(zone, klass->type_parameters());
238 return class_types.Length();
239 }
240
241 // The current enclosing class (or the library top-level class).
214 const dart::Class* klass; 242 const dart::Class* klass;
215 243
216 bool member_is_procedure; 244 const dart::Function* member;
217 bool member_is_factory_procedure;
218 intptr_t member_type_parameters;
219 intptr_t member_type_parameters_offset_start;
220 }; 245 };
221 246
222 247
223 class ActiveClassScope { 248 class ActiveClassScope {
224 public: 249 public:
225 ActiveClassScope(ActiveClass* active_class, 250 ActiveClassScope(ActiveClass* active_class, const dart::Class* klass)
226 intptr_t class_type_parameters,
227 intptr_t class_type_parameters_offset_start,
228 const dart::Class* klass)
229 : active_class_(active_class), saved_(*active_class) { 251 : active_class_(active_class), saved_(*active_class) {
230 active_class_->kernel_class = NULL;
231 active_class_->class_type_parameters = class_type_parameters;
232 active_class_->class_type_parameters_offset_start =
233 class_type_parameters_offset_start;
234 active_class_->klass = klass; 252 active_class_->klass = klass;
235 } 253 }
236 254
237 ~ActiveClassScope() { *active_class_ = saved_; } 255 ~ActiveClassScope() { *active_class_ = saved_; }
238 256
239 private: 257 private:
240 ActiveClass* active_class_; 258 ActiveClass* active_class_;
241 ActiveClass saved_; 259 ActiveClass saved_;
242 }; 260 };
243 261
244 262
245 class ActiveMemberScope { 263 class ActiveMemberScope {
246 public: 264 public:
247 ActiveMemberScope(ActiveClass* active_class, 265 ActiveMemberScope(ActiveClass* active_class, const Function* member)
248 bool member_is_procedure,
249 bool member_is_factory_procedure,
250 intptr_t member_type_parameters,
251 intptr_t member_type_parameters_offset_start)
252 : active_class_(active_class), saved_(*active_class) { 266 : active_class_(active_class), saved_(*active_class) {
253 // The class and kernel_class is inherited. 267 // The class is inherited.
254 active_class_->member_is_procedure = member_is_procedure; 268 active_class_->member = member;
255 active_class_->member_is_factory_procedure = member_is_factory_procedure;
256 active_class_->member_type_parameters = member_type_parameters;
257 active_class_->member_type_parameters_offset_start =
258 member_type_parameters_offset_start;
259 } 269 }
260 270
261 ~ActiveMemberScope() { *active_class_ = saved_; } 271 ~ActiveMemberScope() { *active_class_ = saved_; }
262 272
263 private: 273 private:
264 ActiveClass* active_class_; 274 ActiveClass* active_class_;
265 ActiveClass saved_; 275 ActiveClass saved_;
266 }; 276 };
267 277
268 278
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 namespace kernel { 976 namespace kernel {
967 977
968 RawObject* EvaluateMetadata(const dart::Field& metadata_field); 978 RawObject* EvaluateMetadata(const dart::Field& metadata_field);
969 RawObject* BuildParameterDescriptor(const Function& function); 979 RawObject* BuildParameterDescriptor(const Function& function);
970 980
971 } // namespace kernel 981 } // namespace kernel
972 } // namespace dart 982 } // namespace dart
973 983
974 #endif // !defined(DART_PRECOMPILED_RUNTIME) 984 #endif // !defined(DART_PRECOMPILED_RUNTIME)
975 #endif // RUNTIME_VM_KERNEL_TO_IL_H_ 985 #endif // RUNTIME_VM_KERNEL_TO_IL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698