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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: runtime/vm/kernel_to_il.h
diff --git a/runtime/vm/kernel_to_il.h b/runtime/vm/kernel_to_il.h
index 2faba8879364affa0995c416d14e8ecdb6a60140..9dcaca5a54883e87c117ef0d0f7fd506fd60f077 100644
--- a/runtime/vm/kernel_to_il.h
+++ b/runtime/vm/kernel_to_il.h
@@ -194,43 +194,61 @@ typedef ZoneGrowableArray<PushArgumentInstr*>* ArgumentArray;
class ActiveClass {
public:
- ActiveClass()
- : kernel_class(NULL),
- class_type_parameters(0),
- class_type_parameters_offset_start(-1),
- klass(NULL),
- member_is_procedure(false),
- member_is_factory_procedure(false),
- member_type_parameters(0),
- member_type_parameters_offset_start(-1) {}
-
- // The current enclosing kernel class (if available, otherwise NULL).
- Class* kernel_class;
- intptr_t class_type_parameters;
- intptr_t class_type_parameters_offset_start;
-
- // The current enclosing class (or the library top-level class). When this is
- // a library's top-level class, the kernel_class will be NULL.
+ ActiveClass() : klass(NULL), member(NULL) {}
+
+ bool MemberIsProcedure() {
+ if (member == NULL) return false;
+ RawFunction::Kind function_kind = member->kind();
+ return function_kind == RawFunction::kRegularFunction ||
+ function_kind == RawFunction::kGetterFunction ||
+ function_kind == RawFunction::kSetterFunction ||
+ function_kind == RawFunction::kMethodExtractor ||
+ member->IsFactory();
+ }
+
+ bool MemberIsFactoryProcedure() {
+ if (member == NULL) return false;
+ return member->IsFactory();
+ }
+
+ intptr_t MemberTypeParameterCount(Zone* zone) {
+ if (member == NULL) return 0;
+ RawFunction::Kind function_kind = member->kind();
+ if (member->IsFactory()) {
+ TypeArguments& class_types =
+ dart::TypeArguments::Handle(zone, klass->type_parameters());
+ return class_types.Length();
+ } else if (function_kind == RawFunction::kMethodExtractor) {
+ Function& extracted =
+ Function::Handle(zone, member->extracted_method_closure());
+ TypeArguments& function_types =
+ dart::TypeArguments::Handle(zone, extracted.type_parameters());
+ return function_types.Length();
+ } else {
+ TypeArguments& function_types =
+ dart::TypeArguments::Handle(zone, member->type_parameters());
+ return function_types.Length();
+ }
+ }
+
+ intptr_t ClassTypeParameterCount(Zone* zone) {
+ if (klass == NULL) return 0;
+ TypeArguments& class_types =
+ dart::TypeArguments::Handle(zone, klass->type_parameters());
+ return class_types.Length();
+ }
+
+ // The current enclosing class (or the library top-level class).
const dart::Class* klass;
- bool member_is_procedure;
- bool member_is_factory_procedure;
- intptr_t member_type_parameters;
- intptr_t member_type_parameters_offset_start;
+ const dart::Function* member;
};
class ActiveClassScope {
public:
- ActiveClassScope(ActiveClass* active_class,
- intptr_t class_type_parameters,
- intptr_t class_type_parameters_offset_start,
- const dart::Class* klass)
+ ActiveClassScope(ActiveClass* active_class, const dart::Class* klass)
: active_class_(active_class), saved_(*active_class) {
- active_class_->kernel_class = NULL;
- active_class_->class_type_parameters = class_type_parameters;
- active_class_->class_type_parameters_offset_start =
- class_type_parameters_offset_start;
active_class_->klass = klass;
}
@@ -244,18 +262,10 @@ class ActiveClassScope {
class ActiveMemberScope {
public:
- ActiveMemberScope(ActiveClass* active_class,
- bool member_is_procedure,
- bool member_is_factory_procedure,
- intptr_t member_type_parameters,
- intptr_t member_type_parameters_offset_start)
+ ActiveMemberScope(ActiveClass* active_class, const Function* member)
: active_class_(active_class), saved_(*active_class) {
- // The class and kernel_class is inherited.
- active_class_->member_is_procedure = member_is_procedure;
- active_class_->member_is_factory_procedure = member_is_factory_procedure;
- active_class_->member_type_parameters = member_type_parameters;
- active_class_->member_type_parameters_offset_start =
- member_type_parameters_offset_start;
+ // The class is inherited.
+ active_class_->member = member;
}
~ActiveMemberScope() { *active_class_ = saved_; }

Powered by Google App Engine
This is Rietveld 408576698