Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: runtime/vm/code_generator.cc

Issue 9395016: First part of new ICData infrastructure: use a wrapper object instead of an array. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/code_generator.cc
===================================================================
--- runtime/vm/code_generator.cc (revision 4401)
+++ runtime/vm/code_generator.cc (working copy)
@@ -11,7 +11,6 @@
#include "vm/dart_entry.h"
#include "vm/debugger.h"
#include "vm/exceptions.h"
-#include "vm/ic_data.h"
#include "vm/object_store.h"
#include "vm/resolver.h"
#include "vm/runtime_entry.h"
@@ -528,9 +527,8 @@
}
DartFrameIterator iterator;
DartFrame* caller_frame = iterator.NextFrame();
- ICData ic_data(Array::Handle(
- CodePatcher::GetInstanceCallIcDataAt(caller_frame->pc())));
-
+ ICData& ic_data = ICData::Handle(
+ CodePatcher::GetInstanceCallIcDataAt(caller_frame->pc()));
#if defined(DEBUG)
for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) {
GrowableArray<const Class*> classes;
@@ -549,13 +547,11 @@
#endif // DEBUG
GrowableArray<const Class*> classes;
- ASSERT(ic_data.NumberOfArgumentsChecked() == args.length());
+ ASSERT(ic_data.num_args_tested() == args.length());
for (intptr_t i = 0; i < args.length(); i++) {
classes.Add(&Class::ZoneHandle(args[i]->clazz()));
}
ic_data.AddCheck(classes, target_function);
- CodePatcher::SetInstanceCallIcDataAt(caller_frame->pc(),
- Array::ZoneHandle(ic_data.data()));
if (FLAG_trace_ic) {
OS::Print("InlineCacheMissHandler %d call at 0x%x' adding <%s> -> <%s>\n",
args.length(),
@@ -631,7 +627,7 @@
// Resolve an implicit closure by checking if an instance function
// of the same name exists and creating a closure object of the function.
// Arg0: receiver object.
-// Arg1: ic-data array.
+// Arg1: ic-data.
// Returns: Closure object or NULL (instance function not found).
// This is called by the megamorphic stub when it is unable to resolve an
// instance method. This is done just before the call to noSuchMethod.
@@ -639,9 +635,8 @@
ASSERT(arguments.Count() ==
kResolveImplicitClosureFunctionRuntimeEntry.argument_count());
const Instance& receiver = Instance::CheckedHandle(arguments.At(0));
- const Array& ic_data_array = Array::CheckedHandle(arguments.At(1));
- ICData ic_data(ic_data_array);
- const String& original_function_name = String::Handle(ic_data.FunctionName());
+ const ICData& ic_data = ICData::CheckedHandle(arguments.At(1));
+ const String& original_function_name = String::Handle(ic_data.target_name());
const String& getter_prefix = String::Handle(String::New("get:"));
Closure& closure = Closure::Handle();
if (!original_function_name.StartsWith(getter_prefix)) {
@@ -690,9 +685,8 @@
ASSERT(arguments.Count() ==
kResolveImplicitClosureThroughGetterRuntimeEntry.argument_count());
const Instance& receiver = Instance::CheckedHandle(arguments.At(0));
- const Array& ic_data_array = Array::CheckedHandle(arguments.At(1));
- ICData ic_data(ic_data_array);
- const String& original_function_name = String::Handle(ic_data.FunctionName());
+ const ICData& ic_data = ICData::CheckedHandle(arguments.At(1));
+ const String& original_function_name = String::Handle(ic_data.target_name());
const int kNumArguments = 1;
const int kNumNamedArguments = 0;
const String& getter_function_name =
@@ -820,9 +814,8 @@
ASSERT(arguments.Count() ==
kInvokeNoSuchMethodFunctionRuntimeEntry.argument_count());
const Instance& receiver = Instance::CheckedHandle(arguments.At(0));
- const Array& ic_data_array = Array::CheckedHandle(arguments.At(1));
- ICData ic_data(ic_data_array);
- const String& original_function_name = String::Handle(ic_data.FunctionName());
+ const ICData& ic_data = ICData::CheckedHandle(arguments.At(1));
+ const String& original_function_name = String::Handle(ic_data.target_name());
ASSERT(!Array::CheckedHandle(arguments.At(2)).IsNull());
const Array& orig_arguments = Array::CheckedHandle(arguments.At(3));
// TODO(regis): The signature of the "noSuchMethod" method has to change from

Powered by Google App Engine
This is Rietveld 408576698