<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; 
    required <span class="bool">bool  </span> isFunction  = 3; 
    <span class="comment">/** 
     * type, function or object
     */</span>
    required <span class="string">string</span> type        = 4; 
    optional <span class="number">uint32</span> prototypeID = 5; 
    <span class="comment">/** 
     * Name of class (object) or function
     */</span>
    optional <span class="string">string</span> name        = 6; 
  }
  repeated <span class="message">BacktraceFrame</span> frameList = 1; 
}
