[VM] Consistently use ValidationPolicy in frame iteration APIs
Previously there were places in the code where an API accepted a
`bool validate_frames` and call sites passed an enum value (which
implicitly got converted to a bool).
By changing the APIs to require an enum, the compiler will tell us if a
caller doesn't pass one.
Change-Id: I29fcd0b018e6cdd7e00b5bb03e83b9636d1345d4
Reviewed-on: https://dart-review.googlesource.com/57823
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: RĂ©gis Crelier <regis@google.com>
diff --git a/runtime/lib/stacktrace.cc b/runtime/lib/stacktrace.cc
index a15b9bd..28edcf1 100644
--- a/runtime/lib/stacktrace.cc
+++ b/runtime/lib/stacktrace.cc
@@ -139,7 +139,7 @@
static void AppendFrames(const GrowableObjectArray& code_list,
const GrowableObjectArray& pc_offset_list,
int skip_frames) {
- StackFrameIterator frames(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator frames(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
diff --git a/runtime/vm/become.cc b/runtime/vm/become.cc
index 5a79324..b6512c6 100644
--- a/runtime/vm/become.cc
+++ b/runtime/vm/become.cc
@@ -286,7 +286,8 @@
}
// C++ pointers.
- isolate->VisitObjectPointers(&pointer_visitor, true);
+ isolate->VisitObjectPointers(&pointer_visitor,
+ ValidationPolicy::kValidateFrames);
#ifndef PRODUCT
if (FLAG_support_service) {
ObjectIdRing* ring = isolate->object_id_ring();
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index ddce675..ffd9821 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -386,7 +386,7 @@
Timer timer(true, "LookupDartCode benchmark");
timer.Start();
for (int i = 0; i < kNumIterations; i++) {
- StackFrameIterator frames(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator frames(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 00cc771..f6587d6 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -674,7 +674,7 @@
DisassembleToStdout formatter;
code().Disassemble(&formatter);
PcDescriptors::Handle(code().pc_descriptors()).Print();
- StackFrameIterator frames(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator frames(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
@@ -1174,7 +1174,7 @@
OS::PrintErr(
"-------------------------\n"
"All frames...\n\n");
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator iterator(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = iterator.NextFrame();
@@ -1872,7 +1872,7 @@
Zone* zone = thread->zone();
Isolate* isolate = thread->isolate();
DebuggerStackTrace* stack_trace = new DebuggerStackTrace(8);
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator iterator(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
Code& code = Code::Handle(zone);
@@ -1961,7 +1961,7 @@
// asynchronous function. We truncate the remainder of the synchronous
// stack trace because it contains activations that are part of the
// asynchronous dispatch mechanisms.
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator iterator(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = iterator.NextFrame();
@@ -2028,7 +2028,7 @@
Isolate* isolate = thread->isolate();
DebuggerStackTrace* stack_trace = new DebuggerStackTrace(8);
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator iterator(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
@@ -2199,7 +2199,7 @@
}
ActivationFrame* Debugger::TopDartFrame() const {
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator iterator(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = iterator.NextFrame();
@@ -3440,7 +3440,7 @@
OS::PrintErr(
"-------------------------\n"
"All frames...\n\n");
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator iterator(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = iterator.NextFrame();
@@ -3558,7 +3558,7 @@
Function& function = Function::Handle(zone);
// Find the requested frame.
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator iterator(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
intptr_t current_frame = 0;
@@ -3659,7 +3659,7 @@
OS::PrintErr(
"-------------------------\n"
"All frames...\n\n");
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator iterator(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = iterator.NextFrame();
@@ -3674,7 +3674,7 @@
Zone* zone = thread->zone();
Code& code = Code::Handle(zone);
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator iterator(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
intptr_t current_frame = 0;
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index b4bcec3..c5bfcce 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -122,7 +122,7 @@
}
static void BuildStackTrace(StackTraceBuilder* builder) {
- StackFrameIterator frames(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator frames(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
@@ -163,7 +163,7 @@
// can continue in that frame. Sets 'needs_stacktrace' if there is no
// cath-all handler or if a stack-trace is specified in the catch.
bool Find() {
- StackFrameIterator frames(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator frames(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
@@ -342,7 +342,7 @@
static void FindErrorHandler(uword* handler_pc,
uword* handler_sp,
uword* handler_fp) {
- StackFrameIterator frames(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator frames(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
diff --git a/runtime/vm/gc_compactor.cc b/runtime/vm/gc_compactor.cc
index 4aec300..b10d0b6 100644
--- a/runtime/vm/gc_compactor.cc
+++ b/runtime/vm/gc_compactor.cc
@@ -556,7 +556,7 @@
// N.B.: Heap pointers have already been forwarded. We forward the heap before
// forwarding the stack to limit the number of places that need to be aware of
// forwarding when reading stack maps.
- isolate()->VisitObjectPointers(this, StackFrameIterator::kDontValidateFrames);
+ isolate()->VisitObjectPointers(this, ValidationPolicy::kDontValidateFrames);
}
} // namespace dart
diff --git a/runtime/vm/gc_marker.cc b/runtime/vm/gc_marker.cc
index fd0ee4e..21aa17d 100644
--- a/runtime/vm/gc_marker.cc
+++ b/runtime/vm/gc_marker.cc
@@ -475,7 +475,7 @@
ASSERT(0 <= slice_index && slice_index < num_slices);
if ((slice_index == 0) || (num_slices <= 1)) {
isolate->VisitObjectPointers(visitor,
- StackFrameIterator::kDontValidateFrames);
+ ValidationPolicy::kDontValidateFrames);
}
if ((slice_index == 1) || (num_slices <= 1)) {
heap_->new_space()->VisitObjectPointers(visitor);
diff --git a/runtime/vm/gdb_helpers.cc b/runtime/vm/gdb_helpers.cc
index a15676c..44ba132 100644
--- a/runtime/vm/gdb_helpers.cc
+++ b/runtime/vm/gdb_helpers.cc
@@ -35,7 +35,7 @@
// in the middle of a GC or interested in stub frames.
DART_EXPORT
void _printStackTrace() {
- StackFrameIterator frames(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator frames(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
@@ -60,7 +60,7 @@
DART_EXPORT
void _printStackTraceWithLocals() {
PrintObjectPointersVisitor visitor;
- StackFrameIterator frames(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator frames(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
index a6bf50b..905ba26 100644
--- a/runtime/vm/heap.cc
+++ b/runtime/vm/heap.cc
@@ -267,13 +267,15 @@
Dart::vm_isolate()->heap()->VisitObjects(visitor);
}
-void HeapIterationScope::IterateObjectPointers(ObjectPointerVisitor* visitor,
- bool validate_frames) {
+void HeapIterationScope::IterateObjectPointers(
+ ObjectPointerVisitor* visitor,
+ ValidationPolicy validate_frames) {
isolate()->VisitObjectPointers(visitor, validate_frames);
}
-void HeapIterationScope::IterateStackPointers(ObjectPointerVisitor* visitor,
- bool validate_frames) {
+void HeapIterationScope::IterateStackPointers(
+ ObjectPointerVisitor* visitor,
+ ValidationPolicy validate_frames) {
isolate()->VisitStackPointers(visitor, validate_frames);
}
diff --git a/runtime/vm/heap.h b/runtime/vm/heap.h
index 79e81b2..9678e61 100644
--- a/runtime/vm/heap.h
+++ b/runtime/vm/heap.h
@@ -384,9 +384,9 @@
void IterateVMIsolateObjects(ObjectVisitor* visitor) const;
void IterateObjectPointers(ObjectPointerVisitor* visitor,
- bool validate_frames);
+ ValidationPolicy validate_frames);
void IterateStackPointers(ObjectPointerVisitor* visitor,
- bool validate_frames);
+ ValidationPolicy validate_frames);
private:
Heap* heap_;
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index ae20a77..c00b259 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -1888,7 +1888,7 @@
bool Isolate::creation_enabled_ = false;
void Isolate::VisitObjectPointers(ObjectPointerVisitor* visitor,
- bool validate_frames) {
+ ValidationPolicy validate_frames) {
ASSERT(visitor != NULL);
// Visit objects in the object store.
@@ -1966,7 +1966,7 @@
}
void Isolate::VisitStackPointers(ObjectPointerVisitor* visitor,
- bool validate_frames) {
+ ValidationPolicy validate_frames) {
// Visit objects in all threads (e.g., Dart stack, handles in zones).
thread_registry()->VisitObjectPointers(visitor, validate_frames);
}
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 6584382..2dad860 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -791,8 +791,10 @@
// Visit all object pointers. Caller must ensure concurrent sweeper is not
// running, and the visitor must not allocate.
- void VisitObjectPointers(ObjectPointerVisitor* visitor, bool validate_frames);
- void VisitStackPointers(ObjectPointerVisitor* visitor, bool validate_frames);
+ void VisitObjectPointers(ObjectPointerVisitor* visitor,
+ ValidationPolicy validate_frames);
+ void VisitStackPointers(ObjectPointerVisitor* visitor,
+ ValidationPolicy validate_frames);
void set_user_tag(uword tag) { user_tag_ = tag; }
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index b8f24ef..4832667 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -854,7 +854,7 @@
void IsolateReloadContext::EnsuredUnoptimizedCodeForStack() {
TIMELINE_SCOPE(EnsuredUnoptimizedCodeForStack);
- StackFrameIterator it(StackFrameIterator::kDontValidateFrames,
+ StackFrameIterator it(ValidationPolicy::kDontValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
diff --git a/runtime/vm/object_graph.cc b/runtime/vm/object_graph.cc
index 727857a..6a56a57 100644
--- a/runtime/vm/object_graph.cc
+++ b/runtime/vm/object_graph.cc
@@ -207,7 +207,7 @@
void ObjectGraph::IterateObjects(ObjectGraph::Visitor* visitor) {
Stack stack(isolate());
- isolate()->VisitObjectPointers(&stack, false);
+ isolate()->VisitObjectPointers(&stack, ValidationPolicy::kDontValidateFrames);
stack.TraverseGraph(visitor);
Unmarker::UnmarkAll(isolate());
}
@@ -642,7 +642,8 @@
// Write root "object".
WriteHeader(kRootAddress, 0, kRootCid, stream);
WritePointerVisitor ptr_writer(isolate(), stream, false);
- isolate()->VisitObjectPointers(&ptr_writer, false);
+ isolate()->VisitObjectPointers(&ptr_writer,
+ ValidationPolicy::kDontValidateFrames);
stream->WriteUnsigned(0);
} else {
{
@@ -658,7 +659,8 @@
// Write stack "object".
WriteHeader(kStackAddress, 0, kStackCid, stream);
WritePointerVisitor ptr_writer(isolate(), stream, true);
- isolate()->VisitStackPointers(&ptr_writer, false);
+ isolate()->VisitStackPointers(&ptr_writer,
+ ValidationPolicy::kDontValidateFrames);
stream->WriteUnsigned(0);
}
}
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index 5b3ba92..7d83c25 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -539,8 +539,8 @@
const StackFrameIterator::CrossThreadPolicy cross_thread_policy =
StackFrameIterator::kNoCrossThreadIteration;
#endif
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames,
- thread, cross_thread_policy);
+ StackFrameIterator iterator(ValidationPolicy::kDontValidateFrames, thread,
+ cross_thread_policy);
pc_ = NULL;
fp_ = NULL;
sp_ = NULL;
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index da751b3..bc13a5b 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -2054,7 +2054,7 @@
// Patch static call to point to valid code's entry point.
DEFINE_RUNTIME_ENTRY(FixCallersTarget, 0) {
#if !defined(DART_PRECOMPILED_RUNTIME)
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames, thread,
+ StackFrameIterator iterator(ValidationPolicy::kDontValidateFrames, thread,
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = iterator.NextFrame();
ASSERT(frame != NULL);
@@ -2095,7 +2095,7 @@
// stub.
DEFINE_RUNTIME_ENTRY(FixAllocationStubTarget, 0) {
#if !defined(DART_PRECOMPILED_RUNTIME)
- StackFrameIterator iterator(StackFrameIterator::kDontValidateFrames, thread,
+ StackFrameIterator iterator(ValidationPolicy::kDontValidateFrames, thread,
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = iterator.NextFrame();
ASSERT(frame != NULL);
diff --git a/runtime/vm/scavenger.cc b/runtime/vm/scavenger.cc
index 87b3b3c..9ca79a7 100644
--- a/runtime/vm/scavenger.cc
+++ b/runtime/vm/scavenger.cc
@@ -578,8 +578,7 @@
void Scavenger::IterateRoots(Isolate* isolate, ScavengerVisitor* visitor) {
int64_t start = OS::GetCurrentMonotonicMicros();
- isolate->VisitObjectPointers(visitor,
- StackFrameIterator::kDontValidateFrames);
+ isolate->VisitObjectPointers(visitor, ValidationPolicy::kDontValidateFrames);
int64_t middle = OS::GetCurrentMonotonicMicros();
IterateStoreBuffers(isolate, visitor);
IterateObjectIdTable(isolate, visitor);
diff --git a/runtime/vm/simulator_arm.cc b/runtime/vm/simulator_arm.cc
index 9bb3ca9..3415481 100644
--- a/runtime/vm/simulator_arm.cc
+++ b/runtime/vm/simulator_arm.cc
@@ -267,7 +267,7 @@
void SimulatorDebugger::PrintBacktrace() {
StackFrameIterator frames(
sim_->get_register(FP), sim_->get_register(SP), sim_->get_pc(),
- StackFrameIterator::kDontValidateFrames, Thread::Current(),
+ ValidationPolicy::kDontValidateFrames, Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
ASSERT(frame != NULL);
diff --git a/runtime/vm/simulator_arm64.cc b/runtime/vm/simulator_arm64.cc
index e482786..020321c 100644
--- a/runtime/vm/simulator_arm64.cc
+++ b/runtime/vm/simulator_arm64.cc
@@ -289,7 +289,7 @@
void SimulatorDebugger::PrintBacktrace() {
StackFrameIterator frames(
sim_->get_register(FP), sim_->get_register(SP), sim_->get_pc(),
- StackFrameIterator::kDontValidateFrames, Thread::Current(),
+ ValidationPolicy::kDontValidateFrames, Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
ASSERT(frame != NULL);
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index 50105f9..578129c 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -353,7 +353,7 @@
StackFrameIterator::StackFrameIterator(ValidationPolicy validation_policy,
Thread* thread,
CrossThreadPolicy cross_thread_policy)
- : validate_(validation_policy == kValidateFrames),
+ : validate_(validation_policy == ValidationPolicy::kValidateFrames),
entry_(thread),
exit_(thread),
frames_(thread),
@@ -368,7 +368,7 @@
ValidationPolicy validation_policy,
Thread* thread,
CrossThreadPolicy cross_thread_policy)
- : validate_(validation_policy == kValidateFrames),
+ : validate_(validation_policy == ValidationPolicy::kValidateFrames),
entry_(thread),
exit_(thread),
frames_(thread),
@@ -388,7 +388,7 @@
ValidationPolicy validation_policy,
Thread* thread,
CrossThreadPolicy cross_thread_policy)
- : validate_(validation_policy == kValidateFrames),
+ : validate_(validation_policy == ValidationPolicy::kValidateFrames),
entry_(thread),
exit_(thread),
frames_(thread),
@@ -441,7 +441,7 @@
#endif // !defined(TARGET_ARCH_DBC)
return current_frame_;
}
- ASSERT((validate_ == kDontValidateFrames) || current_frame_->IsValid());
+ ASSERT(!validate_ || current_frame_->IsValid());
if (current_frame_->IsEntryFrame()) {
if (HasNextFrame()) { // We have another chained block.
current_frame_ = NextExitFrame();
@@ -450,7 +450,7 @@
current_frame_ = NULL; // No more frames.
return current_frame_;
}
- ASSERT((validate_ == kDontValidateFrames) || current_frame_->IsExitFrame() ||
+ ASSERT(!validate_ || current_frame_->IsExitFrame() ||
current_frame_->IsDartFrame(validate_) ||
current_frame_->IsStubFrame());
@@ -472,7 +472,7 @@
sp_ = frame->GetCallerSp();
fp_ = frame->GetCallerFp();
pc_ = frame->GetCallerPc();
- ASSERT((validate == kDontValidateFrames) || frame->IsValid());
+ ASSERT(!validate || frame->IsValid());
return frame;
}
@@ -483,7 +483,7 @@
frames_.sp_ = exit_.GetCallerSp();
frames_.fp_ = exit_.GetCallerFp();
frames_.pc_ = exit_.GetCallerPc();
- ASSERT((validate_ == kDontValidateFrames) || exit_.IsValid());
+ ASSERT(!validate_ || exit_.IsValid());
return &exit_;
}
@@ -493,7 +493,7 @@
entry_.fp_ = frames_.fp_;
entry_.pc_ = frames_.pc_;
SetupNextExitFrameData(); // Setup data for next exit frame in chain.
- ASSERT((validate_ == kDontValidateFrames) || entry_.IsValid());
+ ASSERT(!validate_ || entry_.IsValid());
return &entry_;
}
@@ -586,7 +586,7 @@
#if defined(DEBUG)
void ValidateFrames() {
- StackFrameIterator frames(StackFrameIterator::kValidateFrames,
+ StackFrameIterator frames(ValidationPolicy::kValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
diff --git a/runtime/vm/stack_frame.h b/runtime/vm/stack_frame.h
index d809dbc..cfc3d71 100644
--- a/runtime/vm/stack_frame.h
+++ b/runtime/vm/stack_frame.h
@@ -201,10 +201,6 @@
// concurrently.
class StackFrameIterator : public ValueObject {
public:
- enum ValidationPolicy {
- kValidateFrames = 0,
- kDontValidateFrames = 1,
- };
enum CrossThreadPolicy {
kNoCrossThreadIteration = 0,
kAllowCrossThreadIteration = 1,
@@ -308,7 +304,7 @@
explicit DartFrameIterator(
Thread* thread,
StackFrameIterator::CrossThreadPolicy cross_thread_policy)
- : frames_(StackFrameIterator::kDontValidateFrames,
+ : frames_(ValidationPolicy::kDontValidateFrames,
thread,
cross_thread_policy) {}
explicit DartFrameIterator(
@@ -316,7 +312,7 @@
Thread* thread,
StackFrameIterator::CrossThreadPolicy cross_thread_policy)
: frames_(last_fp,
- StackFrameIterator::kDontValidateFrames,
+ ValidationPolicy::kDontValidateFrames,
thread,
cross_thread_policy) {}
@@ -329,7 +325,7 @@
: frames_(fp,
sp,
pc,
- StackFrameIterator::kDontValidateFrames,
+ ValidationPolicy::kDontValidateFrames,
thread,
cross_thread_policy) {}
#endif
diff --git a/runtime/vm/stack_frame_test.cc b/runtime/vm/stack_frame_test.cc
index eadc9bf..f5c5684 100644
--- a/runtime/vm/stack_frame_test.cc
+++ b/runtime/vm/stack_frame_test.cc
@@ -18,7 +18,7 @@
// Unit test for empty stack frame iteration.
ISOLATE_UNIT_TEST_CASE(EmptyStackFrameIteration) {
- StackFrameIterator iterator(StackFrameIterator::kValidateFrames,
+ StackFrameIterator iterator(ValidationPolicy::kValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
EXPECT(!iterator.HasNextFrame());
@@ -50,7 +50,7 @@
void FUNCTION_NAME(StackFrame_frameCount)(Dart_NativeArguments args) {
int count = 0;
- StackFrameIterator frames(StackFrameIterator::kValidateFrames,
+ StackFrameIterator frames(ValidationPolicy::kValidateFrames,
Thread::Current(),
StackFrameIterator::kNoCrossThreadIteration);
while (frames.NextFrame() != NULL) {
diff --git a/runtime/vm/stack_trace.cc b/runtime/vm/stack_trace.cc
index 0174f5c..8f5829d 100644
--- a/runtime/vm/stack_trace.cc
+++ b/runtime/vm/stack_trace.cc
@@ -13,7 +13,7 @@
const Function& async_function) {
Zone* zone = thread->zone();
intptr_t frame_count = 0;
- StackFrameIterator frames(StackFrameIterator::kDontValidateFrames, thread,
+ StackFrameIterator frames(ValidationPolicy::kDontValidateFrames, thread,
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
ASSERT(frame != NULL); // We expect to find a dart invocation frame.
@@ -48,7 +48,7 @@
intptr_t count,
int skip_frames) {
Zone* zone = thread->zone();
- StackFrameIterator frames(StackFrameIterator::kDontValidateFrames, thread,
+ StackFrameIterator frames(ValidationPolicy::kDontValidateFrames, thread,
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = frames.NextFrame();
ASSERT(frame != NULL); // We expect to find a dart invocation frame.
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 5f31782..aec2bf7 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -632,7 +632,7 @@
}
void Thread::VisitObjectPointers(ObjectPointerVisitor* visitor,
- bool validate_frames) {
+ ValidationPolicy validation_policy) {
ASSERT(visitor != NULL);
if (zone_ != NULL) {
@@ -668,10 +668,6 @@
const StackFrameIterator::CrossThreadPolicy cross_thread_policy =
StackFrameIterator::kAllowCrossThreadIteration;
- const StackFrameIterator::ValidationPolicy validation_policy =
- validate_frames ? StackFrameIterator::kValidateFrames
- : StackFrameIterator::kDontValidateFrames;
-
// Iterate over all the stack frames and visit objects on the stack.
StackFrameIterator frames_iterator(top_exit_frame_info(), validation_policy,
this, cross_thread_policy);
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index c90586b..063c4ef 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -15,6 +15,7 @@
#include "vm/os_thread.h"
#include "vm/runtime_entry_list.h"
#include "vm/store_buffer.h"
+
namespace dart {
class AbstractType;
@@ -167,6 +168,11 @@
CACHED_VM_OBJECTS_LIST(V) \
CACHED_ADDRESSES_LIST(V)
+enum class ValidationPolicy {
+ kValidateFrames = 0,
+ kDontValidateFrames = 1,
+};
+
// A VM thread; may be executing Dart code or performing helper tasks like
// garbage collection or compilation. The Thread structure associated with
// a thread is allocated by EnsureInit before entering an isolate, and destroyed
@@ -735,7 +741,8 @@
Thread* next() const { return next_; }
// Visit all object pointers.
- void VisitObjectPointers(ObjectPointerVisitor* visitor, bool validate_frames);
+ void VisitObjectPointers(ObjectPointerVisitor* visitor,
+ ValidationPolicy validate_frames);
bool IsValidHandle(Dart_Handle object) const;
bool IsValidLocalHandle(Dart_Handle object) const;
diff --git a/runtime/vm/thread_registry.cc b/runtime/vm/thread_registry.cc
index c388840..c7883af 100644
--- a/runtime/vm/thread_registry.cc
+++ b/runtime/vm/thread_registry.cc
@@ -60,7 +60,7 @@
}
void ThreadRegistry::VisitObjectPointers(ObjectPointerVisitor* visitor,
- bool validate_frames) {
+ ValidationPolicy validate_frames) {
MonitorLocker ml(threads_lock());
bool mutator_thread_visited = false;
Thread* thread = active_list_;
diff --git a/runtime/vm/thread_registry.h b/runtime/vm/thread_registry.h
index cefcf05..f2426d5 100644
--- a/runtime/vm/thread_registry.h
+++ b/runtime/vm/thread_registry.h
@@ -29,7 +29,8 @@
mutator_thread_(NULL) {}
~ThreadRegistry();
- void VisitObjectPointers(ObjectPointerVisitor* visitor, bool validate_frames);
+ void VisitObjectPointers(ObjectPointerVisitor* visitor,
+ ValidationPolicy validate_frames);
void PrepareForGC();
Thread* mutator_thread() const { return mutator_thread_; }
diff --git a/runtime/vm/thread_test.cc b/runtime/vm/thread_test.cc
index b00cd0a..e033319 100644
--- a/runtime/vm/thread_test.cc
+++ b/runtime/vm/thread_test.cc
@@ -131,7 +131,7 @@
ObjectCounter counter(isolate_, &smi);
// Ensure that our particular zone is visited.
iteration.IterateStackPointers(&counter,
- StackFrameIterator::kValidateFrames);
+ ValidationPolicy::kValidateFrames);
EXPECT_EQ(1, counter.count());
}
char* unique_chars = zone->PrintToString("unique_str_%" Pd, id_);
@@ -148,7 +148,7 @@
ObjectCounter str_counter(isolate_, &unique_str);
// Ensure that our particular zone is visited.
iteration.IterateStackPointers(&str_counter,
- StackFrameIterator::kValidateFrames);
+ ValidationPolicy::kValidateFrames);
// We should visit the string object exactly once.
EXPECT_EQ(1, str_counter.count());
}
@@ -429,7 +429,7 @@
ASSERT(thread->IsAtSafepoint());
ObjectCounter counter(isolate_, &smi);
iteration.IterateStackPointers(&counter,
- StackFrameIterator::kValidateFrames);
+ ValidationPolicy::kValidateFrames);
{
MonitorLocker ml(monitor_);
EXPECT_EQ(*expected_count_, counter.count());
diff --git a/runtime/vm/verifier.cc b/runtime/vm/verifier.cc
index 83f00d2..65d854b 100644
--- a/runtime/vm/verifier.cc
+++ b/runtime/vm/verifier.cc
@@ -74,8 +74,7 @@
VerifyPointersVisitor visitor(isolate, allocated_set);
// Visit all strongly reachable objects.
- iteration.IterateObjectPointers(&visitor,
- StackFrameIterator::kValidateFrames);
+ iteration.IterateObjectPointers(&visitor, ValidationPolicy::kValidateFrames);
VerifyWeakPointersVisitor weak_visitor(&visitor);
// Visit weak handles and prologue weak handles.
isolate->VisitWeakPersistentHandles(&weak_visitor);