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

Unified Diff: vm/code_generator.cc

Issue 10223015: Add a stub_code_space in the heap alongside code_space so that stub code generation happens here an… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 8 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
« no previous file with comments | « no previous file | vm/gc_marker.cc » ('j') | vm/heap.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: vm/code_generator.cc
===================================================================
--- vm/code_generator.cc (revision 6972)
+++ vm/code_generator.cc (working copy)
@@ -33,23 +33,6 @@
DECLARE_FLAG(int, deoptimization_counter_threshold);
-static StackFrame* GetTopDartFrame(
- StackFrameIterator* iterator, bool has_stub_frame) {
- // When runtime calls are made from dart code we assume that we will
- // always have an exit frame and an optional stub frame before we hit
- // the first dart frame.
- StackFrame* exit_frame = iterator->NextFrame();
- ASSERT(exit_frame != NULL && exit_frame->IsExitFrame());
- if (has_stub_frame) {
- StackFrame* stub_frame = iterator->NextFrame();
- ASSERT(stub_frame != NULL && stub_frame->IsStubFrame());
- }
- StackFrame* caller_frame = iterator->NextFrame();
- ASSERT(caller_frame != NULL && caller_frame->IsDartFrame());
- return caller_frame;
-}
-
-
bool CodeGenerator::CanOptimize() {
return
!FLAG_report_usage_count &&
@@ -360,8 +343,8 @@
String::Handle(instantiated_type.Name()).ToCString(),
String::Handle(type.Name()).ToCString());
}
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames);
- StackFrame* caller_frame = GetTopDartFrame(&iterator, false);
+ DartFrameIterator iterator;
+ StackFrame* caller_frame = iterator.NextFrame();
const Function& function = Function::Handle(
caller_frame->LookupDartFunction());
OS::Print(" -> Function %s\n", function.ToFullyQualifiedCString());
@@ -378,8 +361,8 @@
// Update cache: add class of instance and result.
if (type.IsInstantiated() &&
!Class::Handle(type.type_class()).HasTypeArguments()) {
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames);
- StackFrame* caller_frame = GetTopDartFrame(&iterator, false);
+ DartFrameIterator iterator;
+ StackFrame* caller_frame = iterator.NextFrame();
const Code& code = Code::Handle(caller_frame->LookupDartCode());
ASSERT(!code.IsNull());
uword loc = code.GetTypeTestAtNodeId(node_id);
@@ -471,8 +454,8 @@
dst_name.ToCString(),
String::Handle(dst_type.Name()).ToCString());
}
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames);
- StackFrame* caller_frame = GetTopDartFrame(&iterator, false);
+ DartFrameIterator iterator;
+ StackFrame* caller_frame = iterator.NextFrame();
const Function& function = Function::Handle(
caller_frame->LookupDartFunction());
OS::Print(" -> Function %s\n", function.ToFullyQualifiedCString());
@@ -500,8 +483,8 @@
// Update cache: add class of instance and result.
if (dst_type.IsInstantiated() &&
!Class::Handle(dst_type.type_class()).HasTypeArguments()) {
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames);
- StackFrame* caller_frame = GetTopDartFrame(&iterator, false);
+ DartFrameIterator iterator;
+ StackFrame* caller_frame = iterator.NextFrame();
const Code& code = Code::Handle(caller_frame->LookupDartCode());
ASSERT(!code.IsNull());
uword loc = code.GetTypeTestAtNodeId(node_id);
@@ -660,8 +643,8 @@
// This function is called after successful resolving and compilation of
// the target method.
ASSERT(arguments.Count() == kPatchStaticCallRuntimeEntry.argument_count());
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames);
- StackFrame* caller_frame = GetTopDartFrame(&iterator, true);
+ DartFrameIterator iterator;
+ StackFrame* caller_frame = iterator.NextFrame();
uword target = 0;
Function& target_function = Function::Handle();
CodePatcher::GetStaticCallAt(caller_frame->pc(), &target_function, &target);
@@ -688,8 +671,8 @@
int num_named_arguments = -1;
uword target = 0;
String& function_name = String::Handle();
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames);
- StackFrame* caller_frame = GetTopDartFrame(&iterator, true);
+ DartFrameIterator iterator;
+ StackFrame* caller_frame = iterator.NextFrame();
CodePatcher::GetInstanceCallAt(caller_frame->pc(),
&function_name,
&num_arguments,
@@ -827,8 +810,8 @@
}
return target_function.raw();
}
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames);
- StackFrame* caller_frame = GetTopDartFrame(&iterator, true);
+ DartFrameIterator iterator;
+ StackFrame* caller_frame = iterator.NextFrame();
ICData& ic_data = ICData::Handle(
CodePatcher::GetInstanceCallIcDataAt(caller_frame->pc()));
#if defined(DEBUG)
@@ -1262,11 +1245,12 @@
StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames);
StackFrame* frame = iterator.NextFrame();
- while (frame != NULL && !frame->IsDartFrame() && !frame->IsEntryFrame()) {
+ while (frame != NULL && (frame->IsStubFrame() || frame->IsExitFrame())) {
frame = iterator.NextFrame();
}
ASSERT(frame != NULL);
- if (frame->IsDartFrame()) {
+ if (!frame->IsEntryFrame()) {
+ ASSERT(frame->IsDartFrame());
uword target = 0;
Function& target_function = Function::Handle();
CodePatcher::GetStaticCallAt(frame->pc(), &target_function, &target);
@@ -1294,8 +1278,8 @@
DEFINE_RUNTIME_ENTRY(Deoptimize, 1) {
ASSERT(arguments.Count() == kDeoptimizeRuntimeEntry.argument_count());
const Smi& deoptimization_reason_id = Smi::CheckedHandle(arguments.At(0));
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames);
- StackFrame* caller_frame = GetTopDartFrame(&iterator, true);
+ DartFrameIterator iterator;
+ StackFrame* caller_frame = iterator.NextFrame();
const Code& optimized_code = Code::Handle(caller_frame->LookupDartCode());
const Function& function = Function::Handle(optimized_code.function());
ASSERT(!function.IsNull());
« no previous file with comments | « no previous file | vm/gc_marker.cc » ('j') | vm/heap.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698