| Index: runtime/vm/code_generator.cc
|
| diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
|
| index 9b3eb295c83059e52210650f7fca07def7f3d33b..54613cdff366a07a4ba6eaf6ce838260fed31f05 100644
|
| --- a/runtime/vm/code_generator.cc
|
| +++ b/runtime/vm/code_generator.cc
|
| @@ -1049,7 +1049,17 @@ DEFINE_RUNTIME_ENTRY(MegamorphicCacheMissHandler, 3) {
|
|
|
| if (ic_data_or_cache.IsICData()) {
|
| const ICData& ic_data = ICData::Cast(ic_data_or_cache);
|
| - ic_data.AddReceiverCheck(receiver.GetClassId(), target_function);
|
| +
|
| + if (ic_data.NumArgsTested() == 1) {
|
| + ic_data.AddReceiverCheck(receiver.GetClassId(), target_function);
|
| + } else {
|
| + ASSERT(ic_data.NumArgsTested() == 2);
|
| + GrowableArray<intptr_t> class_ids(2);
|
| + class_ids.Add(receiver.GetClassId());
|
| + class_ids.Add(kDynamicCid); // No one will read this.
|
| + ic_data.AddCheck(class_ids, target_function);
|
| + }
|
| +
|
| if (ic_data.NumberOfChecks() > FLAG_max_polymorphic_checks) {
|
| // Switch to megamorphic call.
|
| const MegamorphicCache& cache = MegamorphicCache::Handle(zone,
|
|
|