code: func (c *Contract) AsDelegate() *Contract {
  	// NOTE: caller must, at all times be a contract. It should never happen
  	// that caller is something other than a Contract.
  	parent := c.caller.(*Contract)
  	c.CallerAddress = parent.CallerAddress
  	c.value = parent.value
  
  	return c
  }
docs: // AsDelegate sets the contract to be a delegate call and returns the current
  // contract (for chaining calls)