implement List right quick

This commit is contained in:
Brian Picciano 2016-08-07 09:25:03 -06:00
parent 2433e4a175
commit f751924b26
2 changed files with 25 additions and 0 deletions

View File

@ -52,6 +52,11 @@ func (bctx BuildCtx) buildExprTill(e Expr, fn func(e Expr) bool) Expr {
ea[i] = bctx.buildExprTill(ea[i], fn) ea[i] = bctx.buildExprTill(ea[i], fn)
} }
return ea return ea
case List:
for i := range ea {
ea[i] = bctx.buildExprTill(ea[i], fn)
}
return ea
default: default:
panicf("type %T can't express a value", ea) panicf("type %T can't express a value", ea)
} }

View File

@ -139,6 +139,26 @@ func (tup Tuple) equal(e equaler) bool {
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// List represents an ordered set of Exprs, all of the same type. A List's size
// does not affect its type signature, unlike a Tuple
type List []Expr
// NewList returns a List around the given list of Exprs
func NewList(ee ...Expr) List {
return List(ee)
}
func (l List) String() string {
return "[" + exprsJoin(l) + "]"
}
func (l List) equal(e equaler) bool {
ll, ok := e.(List)
return ok && exprsEqual(l, ll)
}
////////////////////////////////////////////////////////////////////////////////
// Statement represents an actual action which will be taken. The input value is // Statement represents an actual action which will be taken. The input value is
// used as the input to the pipe, and the output of the pipe is the output of // used as the input to the pipe, and the output of the pipe is the output of
// the statement // the statement