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

Unified Diff: runtime/vm/kernel_to_il.h

Issue 2973633002: [kernel] Change how TypeParameterType is calculated. (Closed)
Patch Set: Rebased Created 3 years, 4 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 2c719c2264ea66d86a4442cf872893d0c5b37889..43a589d36c4a5a481ed11fa948dc8eea9c0c6702 100644
--- a/runtime/vm/kernel_to_il.h
+++ b/runtime/vm/kernel_to_il.h
@@ -190,42 +190,60 @@ 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;
Kevin Millikin (Google) 2017/08/08 14:08:51 This doesn't seem safe. I think if there is no me
jensj 2017/08/09 08:39:47 I've added as "HasMember" function, and guarded ca
+ 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;
Kevin Millikin (Google) 2017/08/08 14:08:51 Likewise, I'm not sure this is safe.
jensj 2017/08/09 08:39:47 As above.
+ return member->IsFactory();
+ }
+
+ intptr_t MemberTypeParameterCount(Zone* zone) {
Kevin Millikin (Google) 2017/08/08 14:08:51 We don't need all this code in the header file, do
jensj 2017/08/09 08:39:47 I don't really care - but no, it doesn't have to b
+ 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) {
Kevin Millikin (Google) 2017/08/08 14:08:51 member->IsMethodExtractor()
jensj 2017/08/09 08:39:47 Done.
+ 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;
}
@@ -238,18 +256,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