code: func Virtual(compiler *ast.Compiler, x interface{}) ([]ast.Ref, error) {
  	virtualRefs, err := virtual(compiler, x)
  	if err != nil {
  		return nil, err
  	}
  
  	return dedup(virtualRefs), nil
  }
docs: // Virtual returns the list of virtual data documents that the given AST element depends
  // on.
  //
  // The returned refs are always constant and are truncated at any point where they become
  // dynamic. That is, a ref like data.a.b[x] will be truncated to data.a.b.