static object ReadTagged(object o, Symbol tag, object opts, object pendingForms)
{
ILookup dataReaders = (ILookup)RT.DataReadersVar.deref();
IFn dataReader = (IFn)RT.get(dataReaders, tag);
if (dataReader == null)
{
dataReaders = (ILookup)RT.DefaultDataReadersVar.deref();
dataReader = (IFn)RT.get(dataReaders, tag);
if (dataReader == null)
{
IFn default_reader = (IFn)RT.DefaultDataReaderFnVar.deref();
if (default_reader != null)
return default_reader.invoke(tag, o);
else
throw new ArgumentException("No reader function for tag " + tag.ToString());
}
}
return dataReader.invoke(o);
}