public static object LinyeeMRealloc <T>(LinyeeState L, T[] old_block, int new_size) { int unmanaged_size = (int)GetUnmanagedSize(typeof(T)); int old_size = (old_block == null) ? 0 : old_block.Length; int osize = old_size * unmanaged_size; int nsize = new_size * unmanaged_size; T[] new_block = new T[new_size]; for (int i = 0; i < Math.Min(old_size, new_size); i++) { new_block[i] = old_block[i]; } for (int i = old_size; i < new_size; i++) { new_block[i] = (T)System.Activator.CreateInstance(typeof(T)); } if (CanIndex(typeof(T))) { for (int i = 0; i < new_size; i++) { ArrayElement elem = new_block[i] as ArrayElement; Debug.Assert(elem != null, String.Format("Need to derive type {0} from ArrayElement", typeof(T).ToString())); elem.SetIndex(i); elem.SetArray(new_block); } } SubtractTotalBytes(L, osize); AddTotalBytes(L, nsize); return(new_block); }