class Vernier::StackTableHelpers::Stack

def [](n)

def [](n)
  raise RangeError if n < 0
  stack_idx = idx
  while n > 0
    stack_idx = stack_table.stack_parent_idx(stack_idx)
    n -= 1
  end
  Frame.new(stack_table, stack_table.stack_frame_idx(stack_idx))
end

def each

def each
  return enum_for(__method__) unless block_given?
  stack_idx = idx
  while stack_idx
    frame_idx = stack_table.stack_frame_idx(stack_idx)
    yield Frame.new(stack_table, frame_idx)
    stack_idx = stack_table.stack_parent_idx(stack_idx)
  end
end

def frames

def frames
  each_frame.to_a
end

def leaf_frame

def leaf_frame
  Frame.new(stack_table, leaf_frame_idx)
end

def leaf_frame_idx

def leaf_frame_idx
  stack_table.stack_frame_idx(idx)
end

def to_s

def to_s
  arr = []
  each_frame do |frame|
    arr << frame.to_s
  end
  arr.join("\n")
end