<span class="comment">/** 
 * 
 *  Frames are in innermost-first order.
 */</span>
message <span class="message">BacktraceFrameList</span>
{
  message <span class="message">BacktraceFrame</span>
  {
    required <span class="number">uint32     </span> functionID     = 1; 
    required <span class="number">uint32     </span> argumentObject = 2; 
    required <span class="number">uint32     </span> variableObject = 3; 
    required <span class="number">uint32     </span> thisObject     = 4; 
    <span class="comment">/** 
     * 
     *  TODO: Spec says repeated, while the code only assumes one (optional)
     */</span>
    optional <span class="message">ObjectValue</span> objectValue    = 5; 
    optional <span class="number">uint32     </span> scriptID       = 6; 
    optional <span class="number">uint32     </span> lineNumber     = 7; 
  }
  message <span class="message">ObjectValue</span>
  {
    required <span class="number">uint32</span> objectID     = 1; 
    required <span class="bool">bool  </span> isCallable   = 2; 
    <span class="comment">/** 
     * 
     *  type, function or object
     */</span>
    required <span class="string">string</span> type         = 3; 
    optional <span class="number">uint32</span> prototypeID  = 4; 
    <span class="comment">/** 
     * 
     *  The class of the object.
     */</span>
    optional <span class="string">string</span> className    = 5; 
    <span class="comment">/** 
     * 
     *  If the object is a function, this is the name of
     *  the variable associated with that function (if any).
     */</span>
    optional <span class="string">string</span> functionName = 6; 
  }
  repeated <span class="message">BacktraceFrame</span> frameList = 1; 
}
