code: func (evm *EVM) CallCode(caller ContractRef, addr common.Address, input []byte, gas uint64, value *big.Int) (ret []byte, leftOverGas uint64, err error) {
  	if evm.vmConfig.NoRecursion && evm.depth > 0 {
  		return nil, gas, nil
  	}
  
  	// Fail if we're trying to execute above the call depth limit
  	if evm.depth > int(params.CallCreateDepth) {
  		return nil, gas, ErrDepth
  	}
  	// Fail if we're trying to transfer more than the available balance
  	if !evm.CanTransfer(evm.StateDB, caller.Address(), value) {
  		return nil, gas, ErrInsufficientBalance
  	}
  
  	var (
  		snapshot = evm.StateDB.Snapshot()
  		to       = AccountRef(caller.Address())
  	)
  	// Initialise a new contract and set the code that is to be used by the EVM.
  	// The contract is a scoped environment for this execution context only.
  	contract := NewContract(caller, to, value, gas)
  	contract.SetCallCode(&addr, evm.StateDB.GetCodeHash(addr), evm.StateDB.GetCode(addr))
  
  	ret, err = run(evm, contract, input, false)
  	if err != nil {
  		evm.StateDB.RevertToSnapshot(snapshot)
  		if err != errExecutionReverted {
  			contract.UseGas(contract.Gas)
  		}
  	}
  	return ret, contract.Gas, err
  }
docs: // CallCode executes the contract associated with the addr with the given input
  // as parameters. It also handles any necessary value transfer required and takes
  // the necessary steps to create accounts and reverses the state in case of an
  // execution error or failed value transfer.
  //
  // CallCode differs from Call in the sense that it executes the given address'
  // code with the caller as context.