// Eval evaluates an expression to a value. func Eval(ctx context.Context, expr ast.ExprNode) (interface{}, error) { e := &Evaluator{ctx: ctx} expr.Accept(e) if e.err != nil { return nil, errors.Trace(e.err) } return expr.GetValue(), nil }