anchor.diff:  	try {
   		return new (x) T(<%=(1..i).map{|j|"a#{j}"}.join(', ')%>);
   	} catch (...) {
  -		--finalizer_array.tail;
  +		--base::finalizer_array.tail;
   		undo_malloc(sizeof(T));
   		throw;
   	}
  
positive.code: 	<%}%>
  
  private:
  	void undo_malloc(size_t s);
  
  	template <typename T>
  	static void object_destructor(void* obj);
  
  private:
  	zone(const zone&);
  
negative.code: 	reinterpret_cast<T*>(obj)->~T();
  }
  
  inline void zone::undo_malloc(size_t size)
  {
  	msgpack_zone_chunk* chunk = base::chunk_array.tail;
  	chunk->ptr  -= size;
  	chunk->free += size;
  }
  
  <%0.upto(GENERATION_LIMIT) {|i|%>
  