docs: function object(baseObj) {
    baseObj = baseObj || {};
    var metaObj = baseObj.__objmeta || {};
    // we define __objmeta' with defineProperty so that for/in does not return it:
    Object.defineProperty(baseObj, '__objmeta', {value: metaObj});
  
    /**
    * Set the opening line/col for the object from the opening token (e.g. "(")
    * or current position in the Source
    */
    function setOpening(tokenOrLexer) {
      metaObj.line = tokenOrLexer.line;
      metaObj.col = tokenOrLexer.col;
  
      // whitespace or comments that preceded the opening token
      // (e.g. on a () list whitespace or comments that preceded "(")
      metaObj.prelude = tokenOrLexer.prelude;
    }
    Object.defineProperty(baseObj, 'setOpening', {value: setOpening});
  
    /**
    * Set the closing line/col for a list from the closing token (e.g. ")")
    */
    function setClosing(tokenOrLexer) {
      metaObj.endLine = tokenOrLexer.line;
      metaObj.endCol = tokenOrLexer.col;
  
      // whitespace or comments that preceded the end token
      // (e.g. on a () list whitespace or comments that preceded ")")
      metaObj.endPrelude = tokenOrLexer.prelude;
    }
    Object.defineProperty(baseObj, 'setClosing', {value: setClosing});
  
    return baseObj;
  }