private Type ConstantType(int i)
{
object o = Constants.nth(i);
Type t = o == null ? null : o.GetType();
if (t != null && t.IsPublic)
{
// Java: can't emit derived fn types due to visibility
if (typeof(LazySeq).IsAssignableFrom(t))
return typeof(ISeq);
else if (t == typeof(Keyword))
return t;
else if (typeof(RestFn).IsAssignableFrom(t))
return typeof(RestFn);
else if (typeof(AFn).IsAssignableFrom(t))
return typeof(AFn);
else if (t == typeof(Var))
return t;
else if (t == typeof(String))
return t;
}
return typeof(object);
}