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..7dac63910fa3afc047a95c9ed2a6fd8198e41298 100644 |
--- a/runtime/vm/kernel_to_il.h |
+++ b/runtime/vm/kernel_to_il.h |
@@ -190,42 +190,44 @@ 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 HasMember() { return member != NULL; } |
+ |
+ bool MemberIsProcedure() { |
+ ASSERT(member != NULL); |
+ 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() { |
+ ASSERT(member != NULL); |
+ return member->IsFactory(); |
+ } |
+ |
+ intptr_t MemberTypeParameterCount(Zone* zone); |
+ |
+ intptr_t ClassTypeParameterCount(Zone* zone) { |
+ ASSERT(member != NULL); |
+ 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 +240,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_; } |