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