Chromium Code Reviews| 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_; } |