//static ListReader _listReader = new ListReader();
protected override object Read(PushbackTextReader r, char lparen)
{
if (ARG_ENV.deref() != null)
{
throw new InvalidOperationException("Nested #()s are not allowed");
}
try
{
Var.pushThreadBindings(RT.map(ARG_ENV, PersistentTreeMap.EMPTY));
r.Unread('(');
////object form = ReadAux(r, true, null, true);
object form = ReadAux(r);
//object form = _listReader.invoke(r, '(');
IPersistentVector args = PersistentVector.EMPTY;
PersistentTreeMap argsyms = (PersistentTreeMap)ARG_ENV.deref();
ISeq rargs = argsyms.rseq();
if (rargs != null)
{
int higharg = (int)((IMapEntry)rargs.first()).key();
if (higharg > 0)
{
for (int i = 1; i <= higharg; ++i)
{
object sym = argsyms.valAt(i);
if (sym == null)
{
sym = garg(i);
}
args = args.cons(sym);
}
}
object restsym = argsyms.valAt(-1);
if (restsym != null)
{
args = args.cons(Compiler._AMP_);
args = args.cons(restsym);
}
}
return(RT.list(Compiler.FN, args, form));
}
finally
{
Var.popThreadBindings();
}
}