From 1f7793123a089a8160f948568eedf603c8789829 Mon Sep 17 00:00:00 2001 From: Evan Shaw Date: Thu, 15 Apr 2010 18:04:24 -0700 Subject: exp/eval: Implement x[lo:] R=golang-dev, gri CC=golang-dev http://codereview.appspot.com/908044 Committer: Robert Griesemer --- src/pkg/exp/eval/expr.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/pkg/exp/eval/expr.go') diff --git a/src/pkg/exp/eval/expr.go b/src/pkg/exp/eval/expr.go index 15520830f..8651b0780 100644 --- a/src/pkg/exp/eval/expr.go +++ b/src/pkg/exp/eval/expr.go @@ -589,14 +589,16 @@ func (a *exprCompiler) compile(x ast.Expr, callCtx bool) *expr { return ei.compileIndexExpr(l, r) case *ast.SliceExpr: - end := x.End - if end == nil { - // TODO: set end to len(x.X) - panic("unimplemented") - } + var hi *expr arr := a.compile(x.X, false) lo := a.compile(x.Index, false) - hi := a.compile(end, false) + if x.End == nil { + // End was omitted, so we need to compute len(x.X) + ei := &exprInfo{a.compiler, x.Pos()} + hi = ei.compileBuiltinCallExpr(a.block, lenType, []*expr{arr}) + } else { + hi = a.compile(x.End, false) + } if arr == nil || lo == nil || hi == nil { return nil } -- cgit v1.2.3