public override object toImmutable()
{
if (m_immutable) return this;
// make safe copy
object[] temp = new object[m_size];
for (int i=0; i<m_size; i++)
{
object item = m_values[i];
if (item != null)
{
if (item is List)
item = ((List)item).toImmutable();
else if (item is Map)
item = ((Map)item).toImmutable();
else if (!isImmutable(item))
throw NotImmutableErr.make("Item [" + i + "] not immutable " + @typeof(item)).val;
}
temp[i] = item;
}
// return new immutable list
List ro = new List(m_of, temp);
ro.m_isReadonly = true;
ro.m_immutable = true;
return ro;
}