code: func (c *Context) CacheRead(name, path string) (ckey CacheKey, data []byte, found bool) {
  	if ae != nil {
  		key, data, found := ae.CacheRead(c.ae, name, path)
  		return CacheKey{ae: key}, data, found
  	}
  	return c.cacheRead(ckey, path)
  }
docs: // CacheRead reads from cache the entry with the given name and path.
  // The path specifies the scope of information stored in the cache entry.
  // An entry is invalidated by a write to any location in the file tree rooted at path.
  // The name is an uninterpreted identifier to distinguish the cache entry
  // from other entries using the same path.
  //
  // If it finds a cache entry, CacheRead returns the data and found=true.
  // If it does not find a cache entry, CacheRead returns data=nil and found=false.
  // Either way, CacheRead returns an appropriate cache key for storing to the
  // cache entry using CacheWrite.