code: func walkRefs(exp Expr) []VarRef {
  	refs := make(map[VarRef]struct{})
  	var walk func(exp Expr)
  	walk = func(exp Expr) {
  		switch expr := exp.(type) {
  		case *VarRef:
  			refs[*expr] = struct{}{}
  		case *Call:
  			for _, expr := range expr.Args {
  				if ref, ok := expr.(*VarRef); ok {
  					refs[*ref] = struct{}{}
  				}
  			}
  		case *BinaryExpr:
  			walk(expr.LHS)
  			walk(expr.RHS)
  		case *ParenExpr:
  			walk(expr.Expr)
  		}
  	}
  	walk(exp)
  
  	// Turn the map into a slice.
  	a := make([]VarRef, 0, len(refs))
  	for ref := range refs {
  		a = append(a, ref)
  	}
  	return a
  }
docs: // walkRefs will walk the Expr and return the var refs used.