| Index: vm/object.cc
|
| ===================================================================
|
| --- vm/object.cc (revision 700)
|
| +++ vm/object.cc (working copy)
|
| @@ -18,7 +18,7 @@
|
| #include "vm/debuginfo.h"
|
| #include "vm/growable_array.h"
|
| #include "vm/heap.h"
|
| -#include "vm/ic_stubs.h"
|
| +#include "vm/ic_data.h"
|
| #include "vm/object_store.h"
|
| #include "vm/parser.h"
|
| #include "vm/runtime_entry.h"
|
| @@ -4289,7 +4289,6 @@
|
| result.set_is_optimized(false);
|
| }
|
| result.raw_ptr()->ic_data_ = Array::Empty();
|
| - result.raw_ptr()->class_ic_stubs_ = Array::Empty();
|
| return result.raw();
|
| }
|
|
|
| @@ -4371,18 +4370,6 @@
|
| StorePointer(&raw_ptr()->ic_data_, ic_data.raw());
|
| }
|
|
|
| -
|
| -RawArray* Code::class_ic_stubs() const {
|
| - return raw_ptr()->class_ic_stubs_;
|
| -}
|
| -
|
| -
|
| -void Code::set_class_ic_stubs(const Array& class_ic_stubs) const {
|
| - ASSERT(!class_ic_stubs.IsNull());
|
| - StorePointer(&raw_ptr()->class_ic_stubs_, class_ic_stubs.raw());
|
| -}
|
| -
|
| -
|
| intptr_t Code::GetTokenIndexOfPC(uword pc) const {
|
| intptr_t token_index = -1;
|
| const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors());
|
| @@ -4409,15 +4396,11 @@
|
|
|
|
|
| const char* Code::ToCString() const {
|
| - const char* kFormat = "Code entry:0x%d icstubs: %d";
|
| - intptr_t len = OS::SNPrint(NULL, 0, kFormat,
|
| - EntryPoint(),
|
| - (Array::Handle(class_ic_stubs()).Length() / 2)) + 1;
|
| + const char* kFormat = "Code entry:0x%d";
|
| + intptr_t len = OS::SNPrint(NULL, 0, kFormat, EntryPoint());
|
| char* chars = reinterpret_cast<char*>(
|
| Isolate::Current()->current_zone()->Allocate(len));
|
| - OS::SNPrint(chars, len, kFormat,
|
| - EntryPoint(),
|
| - (Array::Handle(class_ic_stubs()).Length() / 2));
|
| + OS::SNPrint(chars, len, kFormat, EntryPoint());
|
| return chars;
|
| }
|
|
|
| @@ -4451,25 +4434,20 @@
|
| ASSERT(type_arrays != NULL);
|
| const PcDescriptors& descriptors =
|
| PcDescriptors::Handle(this->pc_descriptors());
|
| - String& function_name = String::Handle();
|
| for (intptr_t i = 0; i < descriptors.Length(); i++) {
|
| if (descriptors.DescriptorKind(i) == PcDescriptors::kIcCall) {
|
| - int num_arguments = -1;
|
| - int num_named_arguments = -1;
|
| - uword caller_target = 0;
|
| - CodePatcher::GetInstanceCallAt(descriptors.PC(i),
|
| - &function_name,
|
| - &num_arguments,
|
| - &num_named_arguments,
|
| - &caller_target);
|
| - GrowableArray<const Class*> classes;
|
| - GrowableArray<const Function*> targets;
|
| - bool is_ic = ICStubs::RecognizeICStub(caller_target, &classes, &targets);
|
| - ASSERT(is_ic);
|
| + ICData ic_data(Array::Handle(
|
| + CodePatcher::GetInstanceCallIcDataAt(descriptors.PC(i))));
|
| + ASSERT(ic_data.NumberOfArgumentsChecked() == 1);
|
| + int len = ic_data.NumberOfChecks();
|
| ZoneGrowableArray<const Class*>* types =
|
| new ZoneGrowableArray<const Class*>();
|
| - for (intptr_t k = 0; k < classes.length(); k++) {
|
| - types->Add(classes[k]);
|
| + Function& target = Function::Handle();
|
| + for (intptr_t k = 0; k < len; k++) {
|
| + GrowableArray<const Class*> classes;
|
| + ic_data.GetCheckAt(k, &classes, &target);
|
| + ASSERT(classes.length() == 1);
|
| + types->Add(classes[0]);
|
| }
|
| node_ids->Add(descriptors.NodeId(i));
|
| type_arrays->Add(types);
|
|
|