public List removeRange(Range r)
{
modify();
int s = r.start(m_size);
int e = r.end(m_size);
int n = e - s + 1;
if (n < 0) throw IndexErr.make(r).val;
int shift = m_size-s-n;
if (shift > 0) Array.Copy(m_values, s+n, m_values, s, shift);
m_size -= n;
for (int i=m_size; i<m_size+n; ++i) m_values[i] = null;
return this;
}