code: func Eval(n EvalNode, ctx EvalContext) (interface{}, error) {
  	// Call the lower level eval which doesn't understand early exit,
  	// and if we early exit, it isn't an error.
  	result, err := EvalRaw(n, ctx)
  	if err != nil {
  		if _, ok := err.(EvalEarlyExitError); ok {
  			return nil, nil
  		}
  	}
  
  	return result, err
  }
docs: // Eval evaluates the given EvalNode with the given context, properly
  // evaluating all args in the correct order.