docs: function read_delimited_list(lexer, start, end, initial, separatorRE) {
      start = start || '(';
      end = end || ')';
      separatorRE = separatorRE || /,+/g;
      var startToken = (start && typeof start === 'string' ? lexer.next_token(start) : start);
  
      var list = (initial && sl.isList(initial) ? initial : sl.listFromArray(initial || []));
      list.setOpening(startToken);
  
      // starting a new list
      var token;
      while (!lexer.eos() && (token = lexer.peek_token()) && token && token.text !== end) {
        var nextform = read(lexer);
  
        // some "directives" don't return an actual form:
        if(!isignorableform(nextform)) {
          list.push(nextform);
        }
  
        // if they gave a separator (e.g. commas)
        if(separatorRE && lexer.on(separatorRE)) {
          lexer.skip_text(separatorRE); // just skip it
        }
      }
      if (!token || lexer.eos()) {
          lexer.error("Missing \"" + end + "\" ?  (expected \"" + end + "\", got EOF)", startToken);
      }
      var endToken = lexer.next_token(end); // skip the end token
      list.setClosing(endToken);
  
  // IF THIS IS HERE IT HAS TO BE SMARTER - IT WAS ELIMINATING THE TOP LEVEL PAREN wrapper
  // (AROUND THE WHOLE FILE) AND CAUSING PROBLEMS
  // WOULDNT IT ALSO ELIMINATE A NO-ARG CALL?  SOMETHING LIKE (obj.run) ?
      // we can get extra parens when e.g. the user used parens around
      // an infix expression (which the reader reads as a nested list)
      // if(list.length === 1 && sl.isList(list[0])) {
      //   list = list[0];
      // }
  
  /*
  DELETE?
  IT CANT BE USED ITS CHECKING FOR THE OLD EXTENSION 'lispy'!!!
  DOES THIS ALSO MEAN THE __parenoptional STUFF CAN BE DELETED AS WELL??!!
      // in a lispy file they use parens whereas paren-free in a scripty file
      if(list.length === 1 && sl.isList(list[0])
        && list[0].__parenoptional && lexer.fileext === 'lispy')
      {
        // so here we have to *remove* what's otherwise *extra* parens:
        list = list[0];
      }
  */
  
  // OLD DELETE    lexer.lastReadList = list;
  
      return list;
  }