Remove Frame, merge shadow and quick representations.

Change-Id: I5ae03a5e52111792d2df7e83cbd89ab25777844b
diff --git a/test/StackWalk/stack_walk_jni.cc b/test/StackWalk/stack_walk_jni.cc
index 15d866f..3773198 100644
--- a/test/StackWalk/stack_walk_jni.cc
+++ b/test/StackWalk/stack_walk_jni.cc
@@ -29,31 +29,36 @@
   ( ((reg) < mh.GetCodeItem()->registers_size_) &&                       \
     (( *((reg_bitmap) + (reg)/8) >> ((reg) % 8) ) & 0x01) )
 
-#define CHECK_REGS(...) do {          \
-    int t[] = {__VA_ARGS__};             \
-    int t_size = sizeof(t) / sizeof(*t);      \
-    for (int i = 0; i < t_size; ++i)          \
-      CHECK(REG(mh, reg_bitmap, t[i])) << "Error: Reg " << i << " is not in RegisterMap";  \
-  } while (false)
+#define CHECK_REGS(...) if (!IsShadowFrame()) { \
+    int t[] = {__VA_ARGS__}; \
+    int t_size = sizeof(t) / sizeof(*t); \
+    for (int i = 0; i < t_size; ++i) \
+      CHECK(REG(mh, reg_bitmap, t[i])) << "Error: Reg " << i << " is not in RegisterMap"; \
+  }
 
 static int gJava_StackWalk_refmap_calls = 0;
 
-struct TestReferenceMapVisitor : public Thread::StackVisitor {
-  TestReferenceMapVisitor() {
+struct TestReferenceMapVisitor : public StackVisitor {
+  explicit TestReferenceMapVisitor(const ManagedStack* stack,
+                                   const std::vector<TraceStackFrame>* trace_stack) :
+    StackVisitor(stack, trace_stack) {
   }
 
-  bool VisitFrame(const Frame& frame, uintptr_t pc) {
-    Method* m = frame.GetMethod();
+  bool VisitFrame() {
+    Method* m = GetMethod();
     CHECK(m != NULL);
     LOG(INFO) << "At " << PrettyMethod(m, false);
 
     if (m->IsCalleeSaveMethod() || m->IsNative()) {
       LOG(WARNING) << "no PC for " << PrettyMethod(m);
-      CHECK_EQ(pc, 0u);
+      CHECK_EQ(GetDexPc(), DexFile::kDexNoIndex);
       return true;
     }
-    verifier::PcToReferenceMap map(m->GetGcMap(), m->GetGcMapLength());
-    const uint8_t* reg_bitmap = map.FindBitMap(m->ToDexPC(pc));
+    const uint8_t* reg_bitmap = NULL;
+    if (!IsShadowFrame()) {
+      verifier::PcToReferenceMap map(m->GetGcMap(), m->GetGcMapLength());
+      reg_bitmap = map.FindBitMap(GetDexPc());
+    }
     MethodHelper mh(m);
     StringPiece m_name(mh.GetName());
 
@@ -62,29 +67,29 @@
     // find is what is expected.
     if (m_name == "f") {
       if (gJava_StackWalk_refmap_calls == 1) {
-        CHECK_EQ(1U, m->ToDexPC(pc));
+        CHECK_EQ(1U, GetDexPc());
         CHECK_REGS(1);
       } else {
         CHECK_EQ(gJava_StackWalk_refmap_calls, 2);
-        CHECK_EQ(5U, m->ToDexPC(pc));
+        CHECK_EQ(5U, GetDexPc());
         CHECK_REGS(1);
       }
     } else if (m_name == "g") {
       if (gJava_StackWalk_refmap_calls == 1) {
-        CHECK_EQ(0xcU, m->ToDexPC(pc));
+        CHECK_EQ(0xcU, GetDexPc());
         CHECK_REGS(0, 2);  // Note that v1 is not in the minimal root set
       } else {
         CHECK_EQ(gJava_StackWalk_refmap_calls, 2);
-        CHECK_EQ(0xcU, m->ToDexPC(pc));
+        CHECK_EQ(0xcU, GetDexPc());
         CHECK_REGS(0, 2);
       }
     } else if (m_name == "shlemiel") {
       if (gJava_StackWalk_refmap_calls == 1) {
-        CHECK_EQ(0x380U, m->ToDexPC(pc));
+        CHECK_EQ(0x380U, GetDexPc());
         CHECK_REGS(2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 25);
       } else {
         CHECK_EQ(gJava_StackWalk_refmap_calls, 2);
-        CHECK_EQ(0x380U, m->ToDexPC(pc));
+        CHECK_EQ(0x380U, GetDexPc());
         CHECK_REGS(2, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 21, 25);
       }
     }
@@ -99,8 +104,9 @@
   gJava_StackWalk_refmap_calls++;
 
   // Visitor
-  TestReferenceMapVisitor mapper;
-  Thread::Current()->WalkStack(&mapper);
+  TestReferenceMapVisitor mapper(Thread::Current()->GetManagedStack(),
+                                 Thread::Current()->GetTraceStack());
+  mapper.WalkStack();
 
   return count + 1;
 }
@@ -109,8 +115,9 @@
   gJava_StackWalk_refmap_calls++;
 
   // Visitor
-  TestReferenceMapVisitor mapper;
-  Thread::Current()->WalkStack(&mapper);
+  TestReferenceMapVisitor mapper(Thread::Current()->GetManagedStack(),
+                                 Thread::Current()->GetTraceStack());
+  mapper.WalkStack();
 
   return count + 1;
 }