anchor.diff:  		var newsize = oldsize + 1__u32;
   		if m_capacity < newsize then
   			doGrow(newsize);
  -		!!store.u8(m_cstr + oldsize, ascii.asU8);
  +		!!store.u8(m_cstr + oldsize, ascii.asU8.pod);
   		m_size = newsize;
   	}
   
  
positive.code: 				ascii.asU8 = !!load.u8(p + i.pod);
  
  				if not ascii.isBlank then
  				{
  					if i != 0u then
  					{
  						m_size = m_size - i.pod;
  						std.memory.copyOverlap(m_cstr, m_cstr + i.pod, 0__u64 + m_size);
  					}
  					return;
  				}
  
  				if (i += 1u) == size then
  				{
  					m_size = 0__u32;
  					return;
  				}
  			}
  			while __true;
  		}
  	}
  
  
  	operator += (cref n): ref string
  	{
  		append(n);
  		return self;
  	}
  
  
  private:
  	//! Increase the inner storage
  	func doGrow(newsize: __u32)
  	{
  		var oldcapa = new u32(m_capacity);
  		var newcapa = oldcapa;
  		do
  		{
  			newcapa = (if newcapa < 64u then 64u
  				else (if newcapa < 4096u then newcapa * 2u else newcapa += 4096u));
  		}
  		while newcapa < newsize;
  
  		// create a new array
  		m_capacity = newcapa.pod;
  		m_cstr = std.memory.reallocate(m_cstr, 0u64 + oldcapa, 0u64 + newcapa);
  	}
  
  
  	func doShrink
  	{
  		if m_size == 0__u32 then
  		{
  			std.memory.dispose(m_cstr, 0__u64 + m_capacity);
  			m_capacity = 0__u32;
  			m_cstr = null;
  		}
  	}
  
  
  
negative.code: 	var empty
  		-> new bool(m_size == 0__u32);
  
  	//! Get if the string is empty or contains only blank characters
  	var blank
  		-> isBlank();
  
  	//! Get the size of the string (in bytes)
  	var size
  		-> new u32(m_size);
  