internal Cons readDelimitedList(LocTextReader t, Int32 delim) { Cons ret = null; Cons tail = null; Int32 ch = t.Peek(); while (Char.IsWhiteSpace((Char)ch)) { t.Read(); ch = t.Peek(); } while (ch != delim) { Object o = doRead(t, delim == ')' && ret == null); if (eof(o)) { throw new Exception("Read error - eof found before matching: " + (Char)delim + "\n File: " + t.file + ", line: " + t.line); } EndDelimiter ed = o as EndDelimiter; if (ed != null) { if (ed.delim == delim) { return(ret); } else { throw new Exception("Read error - read unmatched: " + ed.delim + "\n File: " + t.file + ", line: " + t.line); } } Cons link = new Cons(o, null); if (delim == ')' && ret == null && o is CompositeSymbol) { ret = ((CompositeSymbol)o).symbolAsList; tail = ret.rest; } else if (ret == null) { ret = tail = link; } else { tail.rest = link; tail = link; } ch = t.Peek(); while (Char.IsWhiteSpace((Char)ch)) { t.Read(); ch = t.Peek(); } } //eat delim t.Read(); return(ret); }
internal Object ReadEndDelimiter(params Object[] args) { LocTextReader t = (LocTextReader)args[0]; //so we can complain EndDelimiter ed = new EndDelimiter(); //Char c = (Char)args[1];//t.Read(); ed.delim = (Char)args[1]; //t.Read(); return(ed); //throw new Exception("Read error - read unmatched: " + c); }
internal Object ReadEndDelimiter(params Object[] args) { LocTextReader t = (LocTextReader)args[0]; //so we can complain EndDelimiter ed = new EndDelimiter(); //Char c = (Char)args[1];//t.Read(); ed.delim = (Char)args[1];//t.Read(); return ed; //throw new Exception("Read error - read unmatched: " + c); }