| Index: runtime/vm/object.cc
|
| diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
|
| index 3226c9ed0971ebe8c5344e9231596f4a6225b382..c6092b6f187e970c447531e9a0040360fa16968d 100644
|
| --- a/runtime/vm/object.cc
|
| +++ b/runtime/vm/object.cc
|
| @@ -13940,6 +13940,16 @@ void MegamorphicCache::set_filled_entry_count(intptr_t count) const {
|
| }
|
|
|
|
|
| +void MegamorphicCache::set_target_name(const String& value) const {
|
| + StorePointer(&raw_ptr()->target_name_, value.raw());
|
| +}
|
| +
|
| +
|
| +void MegamorphicCache::set_arguments_descriptor(const Array& value) const {
|
| + StorePointer(&raw_ptr()->args_descriptor_, value.raw());
|
| +}
|
| +
|
| +
|
| RawMegamorphicCache* MegamorphicCache::New() {
|
| MegamorphicCache& result = MegamorphicCache::Handle();
|
| { RawObject* raw = Object::Allocate(MegamorphicCache::kClassId,
|
| @@ -13948,6 +13958,20 @@ RawMegamorphicCache* MegamorphicCache::New() {
|
| NoSafepointScope no_safepoint;
|
| result ^= raw;
|
| }
|
| + result.set_filled_entry_count(0);
|
| + return result.raw();
|
| +}
|
| +
|
| +
|
| +RawMegamorphicCache* MegamorphicCache::New(const String& target_name,
|
| + const Array& arguments_descriptor) {
|
| + MegamorphicCache& result = MegamorphicCache::Handle();
|
| + { RawObject* raw = Object::Allocate(MegamorphicCache::kClassId,
|
| + MegamorphicCache::InstanceSize(),
|
| + Heap::kOld);
|
| + NoSafepointScope no_safepoint;
|
| + result ^= raw;
|
| + }
|
| const intptr_t capacity = kInitialCapacity;
|
| const Array& buckets = Array::Handle(
|
| Array::New(kEntryLength * capacity, Heap::kOld));
|
| @@ -13958,6 +13982,8 @@ RawMegamorphicCache* MegamorphicCache::New() {
|
| }
|
| result.set_buckets(buckets);
|
| result.set_mask(capacity - 1);
|
| + result.set_target_name(target_name);
|
| + result.set_arguments_descriptor(arguments_descriptor);
|
| result.set_filled_entry_count(0);
|
| return result.raw();
|
| }
|
| @@ -14015,7 +14041,9 @@ void MegamorphicCache::Insert(const Smi& class_id,
|
|
|
|
|
| const char* MegamorphicCache::ToCString() const {
|
| - return "MegamorphicCache";
|
| + const String& name = String::Handle(target_name());
|
| + return OS::SCreate(Thread::Current()->zone(),
|
| + "MegamorphicCache(%s)", name.ToCString());
|
| }
|
|
|
|
|
| @@ -14023,11 +14051,14 @@ void MegamorphicCache::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| JSONObject jsobj(stream);
|
| AddCommonObjectProperties(&jsobj, "Object", ref);
|
| jsobj.AddServiceId(*this);
|
| + jsobj.AddProperty("_selector", String::Handle(target_name()).ToCString());
|
| if (ref) {
|
| return;
|
| }
|
| jsobj.AddProperty("_buckets", Object::Handle(buckets()));
|
| jsobj.AddProperty("_mask", mask());
|
| + jsobj.AddProperty("_argumentsDescriptor",
|
| + Object::Handle(arguments_descriptor()));
|
| }
|
|
|
|
|
|
|