diff --git a/cue/builtin.go b/cue/builtin.go
index 6ef6621..e149554 100644
--- a/cue/builtin.go
+++ b/cue/builtin.go
@@ -38,7 +38,7 @@
 	"cuelang.org/go/internal/core/runtime"
 )
 
-// A builtin is a builtin function or constant.
+// A Builtin is a builtin function or constant.
 //
 // A function may return and a constant may be any of the following types:
 //
@@ -56,32 +56,31 @@
 //   []T
 //   map[string]T
 //
-type builtin struct {
+type Builtin struct {
 	Name   string
-	pkg    label
-	Params []kind
-	Result kind
-	Func   func(c *callCtxt)
-	// Const  interface{}
-	Const string
+	Pkg    adt.Feature
+	Params []adt.Kind
+	Result adt.Kind
+	Func   func(c *CallCtxt)
+	Const  string
 }
 
-type builtinPkg struct {
-	native []*builtin
-	cue    string
+type Package struct {
+	Native []*Builtin
+	CUE    string
 }
 
-func mustCompileBuiltins(ctx *context, p *builtinPkg, pkgName string) *adt.Vertex {
+func (p *Package) MustCompile(ctx *adt.OpContext, pkgName string) *adt.Vertex {
 	obj := &adt.Vertex{}
-	pkgLabel := ctx.Label(pkgName, false)
+	pkgLabel := ctx.StringLabel(pkgName)
 	st := &adt.StructLit{}
-	if len(p.native) > 0 {
+	if len(p.Native) > 0 {
 		obj.AddConjunct(adt.MakeConjunct(nil, st))
 	}
-	for _, b := range p.native {
-		b.pkg = pkgLabel
+	for _, b := range p.Native {
+		b.Pkg = pkgLabel
 
-		f := ctx.Label(b.Name, false) // never starts with _
+		f := ctx.StringLabel(b.Name) // never starts with _
 		// n := &node{baseValue: newBase(imp.Path)}
 		var v adt.Expr = toBuiltin(ctx, b)
 		if b.Const != "" {
@@ -94,32 +93,32 @@
 	}
 
 	// Parse builtin CUE
-	if p.cue != "" {
-		expr, err := parser.ParseExpr(pkgName, p.cue)
+	if p.CUE != "" {
+		expr, err := parser.ParseExpr(pkgName, p.CUE)
 		if err != nil {
-			panic(fmt.Errorf("could not parse %v: %v", p.cue, err))
+			panic(fmt.Errorf("could not parse %v: %v", p.CUE, err))
 		}
-		c, err := compile.Expr(nil, ctx.opCtx.Runtime, expr)
+		c, err := compile.Expr(nil, ctx.Runtime, expr)
 		if err != nil {
-			panic(fmt.Errorf("could compile parse %v: %v", p.cue, err))
+			panic(fmt.Errorf("could compile parse %v: %v", p.CUE, err))
 		}
 		obj.AddConjunct(c)
 	}
 
 	// We could compile lazily, but this is easier for debugging.
-	obj.Finalize(ctx.opCtx)
-	if err := obj.Err(ctx.opCtx, adt.Finalized); err != nil {
+	obj.Finalize(ctx)
+	if err := obj.Err(ctx, adt.Finalized); err != nil {
 		panic(err.Err)
 	}
 
 	return obj
 }
 
-func toBuiltin(ctx *context, b *builtin) *adt.Builtin {
+func toBuiltin(ctx *adt.OpContext, b *Builtin) *adt.Builtin {
 	x := &adt.Builtin{
 		Params:  b.Params,
 		Result:  b.Result,
-		Package: b.pkg,
+		Package: b.Pkg,
 		Name:    b.Name,
 	}
 	x.Func = func(ctx *adt.OpContext, args []adt.Value) (ret adt.Expr) {
@@ -127,43 +126,42 @@
 		index := runtime.Data.(*index)
 
 		// call, _ := ctx.Source().(*ast.CallExpr)
-		c := &callCtxt{
-			idx: index,
+		c := &CallCtxt{
 			// src:  call,
 			ctx:     index.newContext(),
 			args:    args,
 			builtin: b,
 		}
 		defer func() {
-			var errVal interface{} = c.err
+			var errVal interface{} = c.Err
 			if err := recover(); err != nil {
 				errVal = err
 			}
 			ret = processErr(c, errVal, ret)
 		}()
 		b.Func(c)
-		switch v := c.ret.(type) {
+		switch v := c.Ret.(type) {
 		case adt.Value:
 			return v
 		case *valueError:
 			return v.err
 		}
-		if c.err != nil {
+		if c.Err != nil {
 			return nil
 		}
-		return convert.GoValueToValue(ctx, c.ret, true)
+		return convert.GoValueToValue(ctx, c.Ret, true)
 	}
 	return x
 }
 
 // newConstBuiltin parses and creates any CUE expression that does not have
 // fields.
-func mustParseConstBuiltin(ctx *context, name, val string) adt.Expr {
+func mustParseConstBuiltin(ctx *adt.OpContext, name, val string) adt.Expr {
 	expr, err := parser.ParseExpr("<builtin:"+name+">", val)
 	if err != nil {
 		panic(err)
 	}
-	c, err := compile.Expr(nil, ctx.Runtime, expr)
+	c, err := compile.Expr(nil, ctx, expr)
 	if err != nil {
 		panic(err)
 	}
@@ -182,18 +180,18 @@
 	return src.Pos()
 }
 
-func (x *builtin) name(ctx *context) string {
-	if x.pkg == 0 {
+func (x *Builtin) name(ctx *context) string {
+	if x.Pkg == 0 {
 		return x.Name
 	}
-	return fmt.Sprintf("%s.%s", ctx.LabelStr(x.pkg), x.Name)
+	return fmt.Sprintf("%s.%s", ctx.LabelStr(x.Pkg), x.Name)
 }
 
-func (x *builtin) isValidator() bool {
-	return len(x.Params) == 1 && x.Result == boolKind
+func (x *Builtin) isValidator() bool {
+	return len(x.Params) == 1 && x.Result == adt.BoolKind
 }
 
-func processErr(call *callCtxt, errVal interface{}, ret adt.Expr) adt.Expr {
+func processErr(call *CallCtxt, errVal interface{}, ret adt.Expr) adt.Expr {
 	ctx := call.ctx
 	src := call.src
 	switch err := errVal.(type) {
@@ -211,7 +209,7 @@
 	case errors.Error:
 		ret = wrapCallErr(call, &adt.Bottom{Err: err})
 	case error:
-		if call.err == internal.ErrIncomplete {
+		if call.Err == internal.ErrIncomplete {
 			ret = ctx.mkErr(src, codeIncomplete, "incomplete value")
 		} else {
 			// TODO: store the underlying error explicitly
@@ -226,7 +224,7 @@
 	return ret
 }
 
-func wrapCallErr(c *callCtxt, b *adt.Bottom) *adt.Bottom {
+func wrapCallErr(c *CallCtxt, b *adt.Bottom) *adt.Bottom {
 	pos := token.NoPos
 	if c.src != nil {
 		if src := c.src.Source(); src != nil {
@@ -240,7 +238,7 @@
 	}
 }
 
-func (c *callCtxt) convertError(x interface{}, name string) *adt.Bottom {
+func (c *CallCtxt) convertError(x interface{}, name string) *adt.Bottom {
 	var err errors.Error
 	switch v := x.(type) {
 	case nil:
@@ -259,7 +257,7 @@
 		if name != "" {
 			err = errors.Newf(c.Pos(), "%s: %v", name, v)
 		} else {
-			err = errors.Newf(c.Pos(), "error in call to %s: %v", c.name(), v)
+			err = errors.Newf(c.Pos(), "error in call to %s: %v", c.Name(), v)
 		}
 
 	default:
@@ -268,39 +266,38 @@
 	if err != internal.ErrIncomplete {
 		return &adt.Bottom{
 			// Wrap to preserve position information.
-			Err: errors.Wrapf(err, c.Pos(), "error in call to %s", c.name()),
+			Err: errors.Wrapf(err, c.Pos(), "error in call to %s", c.Name()),
 		}
 	}
 	return &adt.Bottom{
 		Code: adt.IncompleteError,
-		Err:  errors.Newf(c.Pos(), "incomplete values in call to %s", c.name()),
+		Err:  errors.Newf(c.Pos(), "incomplete values in call to %s", c.Name()),
 	}
 }
 
-// callCtxt is passed to builtin implementations.
-type callCtxt struct {
-	idx     *index
+// CallCtxt is passed to builtin implementations that need to use a cue.Value. This is an internal type. It's interface may change.
+type CallCtxt struct {
 	src     adt.Expr // *adt.CallExpr
 	ctx     *context
-	builtin *builtin
-	err     interface{}
-	ret     interface{}
+	builtin *Builtin
+	Err     interface{}
+	Ret     interface{}
 
 	args []adt.Value
 }
 
-func (c *callCtxt) Pos() token.Pos {
+func (c *CallCtxt) Pos() token.Pos {
 	return c.ctx.opCtx.Pos()
 }
 
-func (c *callCtxt) name() string {
+func (c *CallCtxt) Name() string {
 	return c.builtin.name(c.ctx)
 }
 
 var builtins = map[string]*Instance{}
 
-func initBuiltins(pkgs map[string]*builtinPkg) {
-	ctx := sharedIndex.newContext()
+func initBuiltins(pkgs map[string]*Package) {
+	ctx := sharedIndex.newContext().opCtx
 	keys := []string{}
 	for k := range pkgs {
 		keys = append(keys, k)
@@ -308,7 +305,7 @@
 	sort.Strings(keys)
 	for _, k := range keys {
 		b := pkgs[k]
-		e := mustCompileBuiltins(ctx, b, k)
+		e := b.MustCompile(ctx, k)
 
 		i := sharedIndex.addInst(&Instance{
 			ImportPath: k,
@@ -349,20 +346,20 @@
 	}
 }
 
-// do returns whether the call should be done.
-func (c *callCtxt) do() bool {
-	return c.err == nil
+// Do returns whether the call should be done.
+func (c *CallCtxt) Do() bool {
+	return c.Err == nil
 }
 
 type callError struct {
-	b *bottom
+	b *adt.Bottom
 }
 
 func (e *callError) Error() string {
 	return fmt.Sprint(e.b)
 }
 
-func (c *callCtxt) errf(src source, underlying error, format string, args ...interface{}) {
+func (c *CallCtxt) errf(src adt.Node, underlying error, format string, args ...interface{}) {
 	a := make([]interface{}, 0, 2+len(args))
 	if err, ok := underlying.(*valueError); ok {
 		a = append(a, err.err)
@@ -370,19 +367,19 @@
 	a = append(a, format)
 	a = append(a, args...)
 	err := c.ctx.mkErr(src, a...)
-	c.err = &callError{err}
+	c.Err = &callError{err}
 }
 
-func (c *callCtxt) errcf(src source, code adt.ErrorCode, format string, args ...interface{}) {
+func (c *CallCtxt) errcf(src adt.Node, code adt.ErrorCode, format string, args ...interface{}) {
 	a := make([]interface{}, 0, 2+len(args))
 	a = append(a, code)
 	a = append(a, format)
 	a = append(a, args...)
 	err := c.ctx.mkErr(src, a...)
-	c.err = &callError{err}
+	c.Err = &callError{err}
 }
 
-func (c *callCtxt) value(i int) Value {
+func (c *CallCtxt) Value(i int) Value {
 	v := newValueRoot(c.ctx, c.args[i])
 	// TODO: remove default
 	// v, _ = v.Default()
@@ -392,7 +389,7 @@
 	return v
 }
 
-func (c *callCtxt) structVal(i int) *Struct {
+func (c *CallCtxt) Struct(i int) *Struct {
 	v := newValueRoot(c.ctx, c.args[i])
 	s, err := v.Struct()
 	if err != nil {
@@ -402,9 +399,9 @@
 	return s
 }
 
-func (c *callCtxt) invalidArgType(arg value, i int, typ string, err error) {
+func (c *CallCtxt) invalidArgType(arg adt.Expr, i int, typ string, err error) {
 	if ve, ok := err.(*valueError); ok && ve.err.IsIncomplete() {
-		c.err = ve
+		c.Err = ve
 		return
 	}
 	v, ok := arg.(adt.Value)
@@ -413,27 +410,27 @@
 	if !ok {
 		c.errf(c.src, nil,
 			"cannot use incomplete value %s as %s in argument %d to %s: %v",
-			c.ctx.str(arg), typ, i, c.name(), err)
+			c.ctx.str(arg), typ, i, c.Name(), err)
 	}
 	if err != nil {
 		c.errf(c.src, err,
 			"cannot use %s (type %s) as %s in argument %d to %s: %v",
-			c.ctx.str(arg), v.Kind(), typ, i, c.name(), err)
+			c.ctx.str(arg), v.Kind(), typ, i, c.Name(), err)
 	} else {
 		c.errf(c.src, err,
 			"cannot use %s (type %s) as %s in argument %d to %s",
-			c.ctx.str(arg), v.Kind(), typ, i, c.name())
+			c.ctx.str(arg), v.Kind(), typ, i, c.Name())
 	}
 }
 
-func (c *callCtxt) int(i int) int     { return int(c.intValue(i, 64, "int64")) }
-func (c *callCtxt) int8(i int) int8   { return int8(c.intValue(i, 8, "int8")) }
-func (c *callCtxt) int16(i int) int16 { return int16(c.intValue(i, 16, "int16")) }
-func (c *callCtxt) int32(i int) int32 { return int32(c.intValue(i, 32, "int32")) }
-func (c *callCtxt) rune(i int) rune   { return rune(c.intValue(i, 32, "rune")) }
-func (c *callCtxt) int64(i int) int64 { return int64(c.intValue(i, 64, "int64")) }
+func (c *CallCtxt) Int(i int) int     { return int(c.intValue(i, 64, "int64")) }
+func (c *CallCtxt) Int8(i int) int8   { return int8(c.intValue(i, 8, "int8")) }
+func (c *CallCtxt) Int16(i int) int16 { return int16(c.intValue(i, 16, "int16")) }
+func (c *CallCtxt) Int32(i int) int32 { return int32(c.intValue(i, 32, "int32")) }
+func (c *CallCtxt) Rune(i int) rune   { return rune(c.intValue(i, 32, "rune")) }
+func (c *CallCtxt) Int64(i int) int64 { return int64(c.intValue(i, 64, "int64")) }
 
-func (c *callCtxt) intValue(i, bits int, typ string) int64 {
+func (c *CallCtxt) intValue(i, bits int, typ string) int64 {
 	arg := c.args[i]
 	x := newValueRoot(c.ctx, arg)
 	n, err := x.Int(nil)
@@ -443,20 +440,20 @@
 	}
 	if n.BitLen() > bits {
 		c.errf(c.src, err, "int %s overflows %s in argument %d in call to %s",
-			n, typ, i, c.name())
+			n, typ, i, c.Name())
 	}
 	res, _ := x.Int64()
 	return res
 }
 
-func (c *callCtxt) uint(i int) uint     { return uint(c.uintValue(i, 64, "uint64")) }
-func (c *callCtxt) uint8(i int) uint8   { return uint8(c.uintValue(i, 8, "uint8")) }
-func (c *callCtxt) byte(i int) uint8    { return byte(c.uintValue(i, 8, "byte")) }
-func (c *callCtxt) uint16(i int) uint16 { return uint16(c.uintValue(i, 16, "uint16")) }
-func (c *callCtxt) uint32(i int) uint32 { return uint32(c.uintValue(i, 32, "uint32")) }
-func (c *callCtxt) uint64(i int) uint64 { return uint64(c.uintValue(i, 64, "uint64")) }
+func (c *CallCtxt) Uint(i int) uint     { return uint(c.uintValue(i, 64, "uint64")) }
+func (c *CallCtxt) Uint8(i int) uint8   { return uint8(c.uintValue(i, 8, "uint8")) }
+func (c *CallCtxt) Byte(i int) uint8    { return byte(c.uintValue(i, 8, "byte")) }
+func (c *CallCtxt) Uint16(i int) uint16 { return uint16(c.uintValue(i, 16, "uint16")) }
+func (c *CallCtxt) Uint32(i int) uint32 { return uint32(c.uintValue(i, 32, "uint32")) }
+func (c *CallCtxt) Uint64(i int) uint64 { return uint64(c.uintValue(i, 64, "uint64")) }
 
-func (c *callCtxt) uintValue(i, bits int, typ string) uint64 {
+func (c *CallCtxt) uintValue(i, bits int, typ string) uint64 {
 	x := newValueRoot(c.ctx, c.args[i])
 	n, err := x.Int(nil)
 	if err != nil || n.Sign() < 0 {
@@ -465,13 +462,13 @@
 	}
 	if n.BitLen() > bits {
 		c.errf(c.src, err, "int %s overflows %s in argument %d in call to %s",
-			n, typ, i, c.name())
+			n, typ, i, c.Name())
 	}
 	res, _ := x.Uint64()
 	return res
 }
 
-func (c *callCtxt) decimal(i int) *apd.Decimal {
+func (c *CallCtxt) Decimal(i int) *apd.Decimal {
 	x := newValueRoot(c.ctx, c.args[i])
 	if _, err := x.MantExp(nil); err != nil {
 		c.invalidArgType(c.args[i], i, "Decimal", err)
@@ -480,7 +477,7 @@
 	return &c.args[i].(*numLit).X
 }
 
-func (c *callCtxt) float64(i int) float64 {
+func (c *CallCtxt) Float64(i int) float64 {
 	x := newValueRoot(c.ctx, c.args[i])
 	res, err := x.Float64()
 	if err != nil {
@@ -490,7 +487,7 @@
 	return res
 }
 
-func (c *callCtxt) bigInt(i int) *big.Int {
+func (c *CallCtxt) BigInt(i int) *big.Int {
 	x := newValueRoot(c.ctx, c.args[i])
 	n, err := x.Int(nil)
 	if err != nil {
@@ -502,7 +499,7 @@
 
 var ten = big.NewInt(10)
 
-func (c *callCtxt) bigFloat(i int) *big.Float {
+func (c *CallCtxt) BigFloat(i int) *big.Float {
 	x := newValueRoot(c.ctx, c.args[i])
 	var mant big.Int
 	exp, err := x.MantExp(&mant)
@@ -520,7 +517,7 @@
 	return f
 }
 
-func (c *callCtxt) string(i int) string {
+func (c *CallCtxt) String(i int) string {
 	x := newValueRoot(c.ctx, c.args[i])
 	v, err := x.String()
 	if err != nil {
@@ -530,7 +527,7 @@
 	return v
 }
 
-func (c *callCtxt) bytes(i int) []byte {
+func (c *CallCtxt) Bytes(i int) []byte {
 	x := newValueRoot(c.ctx, c.args[i])
 	v, err := x.Bytes()
 	if err != nil {
@@ -540,7 +537,7 @@
 	return v
 }
 
-func (c *callCtxt) reader(i int) io.Reader {
+func (c *CallCtxt) Reader(i int) io.Reader {
 	x := newValueRoot(c.ctx, c.args[i])
 	// TODO: optimize for string and bytes cases
 	r, err := x.Reader()
@@ -551,7 +548,7 @@
 	return r
 }
 
-func (c *callCtxt) bool(i int) bool {
+func (c *CallCtxt) Bool(i int) bool {
 	x := newValueRoot(c.ctx, c.args[i])
 	b, err := x.Bool()
 	if err != nil {
@@ -561,7 +558,7 @@
 	return b
 }
 
-func (c *callCtxt) list(i int) (a []Value) {
+func (c *CallCtxt) List(i int) (a []Value) {
 	arg := c.args[i]
 	x := newValueRoot(c.ctx, arg)
 	v, err := x.List()
@@ -575,7 +572,7 @@
 	return a
 }
 
-func (c *callCtxt) iter(i int) (a Iterator) {
+func (c *CallCtxt) Iter(i int) (a Iterator) {
 	arg := c.args[i]
 	x := newValueRoot(c.ctx, arg)
 	v, err := x.List()
@@ -586,7 +583,7 @@
 	return v
 }
 
-func (c *callCtxt) decimalList(i int) (a []*apd.Decimal) {
+func (c *CallCtxt) DecimalList(i int) (a []*apd.Decimal) {
 	arg := c.args[i]
 	x := newValueRoot(c.ctx, arg)
 	v, err := x.List()
@@ -598,7 +595,7 @@
 		num, err := v.Value().getNum(numKind)
 		if err != nil {
 			c.errf(c.src, err, "invalid list element %d in argument %d to %s: %v",
-				j, i, c.name(), err)
+				j, i, c.Name(), err)
 			break
 		}
 		a = append(a, &num.X)
@@ -606,7 +603,7 @@
 	return a
 }
 
-func (c *callCtxt) strList(i int) (a []string) {
+func (c *CallCtxt) StringList(i int) (a []string) {
 	arg := c.args[i]
 	x := newValueRoot(c.ctx, arg)
 	v, err := x.List()
@@ -617,7 +614,7 @@
 	for j := 0; v.Next(); j++ {
 		str, err := v.Value().String()
 		if err != nil {
-			c.err = errors.Wrapf(err, c.Pos(),
+			c.Err = errors.Wrapf(err, c.Pos(),
 				"element %d of list argument %d", j, i)
 			break
 		}
diff --git a/cue/builtins.go b/cue/builtins.go
index 87ad902..90671fe 100644
--- a/cue/builtins.go
+++ b/cue/builtins.go
@@ -147,12 +147,12 @@
 	return true, nil
 }
 
-var builtinPackages = map[string]*builtinPkg{
+var builtinPackages = map[string]*Package{
 	// "": {
 	// 	native: []*builtin{},
 	// },
 	"crypto/md5": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:  "Size",
 			Const: "16",
 		}, {
@@ -162,10 +162,10 @@
 			Name:   "Sum",
 			Params: []kind{bytesKind | stringKind},
 			Result: bytesKind | stringKind,
-			Func: func(c *callCtxt) {
-				data := c.bytes(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				data := c.Bytes(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						a := md5.Sum(data)
 						return a[:]
 					}()
@@ -174,7 +174,7 @@
 		}},
 	},
 	"crypto/sha1": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:  "Size",
 			Const: "20",
 		}, {
@@ -184,10 +184,10 @@
 			Name:   "Sum",
 			Params: []kind{bytesKind | stringKind},
 			Result: bytesKind | stringKind,
-			Func: func(c *callCtxt) {
-				data := c.bytes(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				data := c.Bytes(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						a := sha1.Sum(data)
 						return a[:]
 					}()
@@ -196,7 +196,7 @@
 		}},
 	},
 	"crypto/sha256": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:  "Size",
 			Const: "32",
 		}, {
@@ -209,10 +209,10 @@
 			Name:   "Sum256",
 			Params: []kind{bytesKind | stringKind},
 			Result: bytesKind | stringKind,
-			Func: func(c *callCtxt) {
-				data := c.bytes(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				data := c.Bytes(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						a := sha256.Sum256(data)
 						return a[:]
 					}()
@@ -222,10 +222,10 @@
 			Name:   "Sum224",
 			Params: []kind{bytesKind | stringKind},
 			Result: bytesKind | stringKind,
-			Func: func(c *callCtxt) {
-				data := c.bytes(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				data := c.Bytes(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						a := sha256.Sum224(data)
 						return a[:]
 					}()
@@ -234,7 +234,7 @@
 		}},
 	},
 	"crypto/sha512": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:  "Size",
 			Const: "64",
 		}, {
@@ -253,10 +253,10 @@
 			Name:   "Sum512",
 			Params: []kind{bytesKind | stringKind},
 			Result: bytesKind | stringKind,
-			Func: func(c *callCtxt) {
-				data := c.bytes(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				data := c.Bytes(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						a := sha512.Sum512(data)
 						return a[:]
 					}()
@@ -266,10 +266,10 @@
 			Name:   "Sum384",
 			Params: []kind{bytesKind | stringKind},
 			Result: bytesKind | stringKind,
-			Func: func(c *callCtxt) {
-				data := c.bytes(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				data := c.Bytes(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						a := sha512.Sum384(data)
 						return a[:]
 					}()
@@ -279,10 +279,10 @@
 			Name:   "Sum512_224",
 			Params: []kind{bytesKind | stringKind},
 			Result: bytesKind | stringKind,
-			Func: func(c *callCtxt) {
-				data := c.bytes(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				data := c.Bytes(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						a := sha512.Sum512_224(data)
 						return a[:]
 					}()
@@ -292,10 +292,10 @@
 			Name:   "Sum512_256",
 			Params: []kind{bytesKind | stringKind},
 			Result: bytesKind | stringKind,
-			Func: func(c *callCtxt) {
-				data := c.bytes(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				data := c.Bytes(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						a := sha512.Sum512_256(data)
 						return a[:]
 					}()
@@ -304,14 +304,14 @@
 		}},
 	},
 	"encoding/base64": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "EncodedLen",
 			Params: []kind{topKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				encoding, n := c.value(0), c.int(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				encoding, n := c.Value(0), c.Int(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if err := encoding.Null(); err != nil {
 							return 0, fmt.Errorf("base64: unsupported encoding: %v", err)
 						}
@@ -323,10 +323,10 @@
 			Name:   "DecodedLen",
 			Params: []kind{topKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				encoding, x := c.value(0), c.int(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				encoding, x := c.Value(0), c.Int(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if err := encoding.Null(); err != nil {
 							return 0, fmt.Errorf("base64: unsupported encoding: %v", err)
 						}
@@ -338,10 +338,10 @@
 			Name:   "Encode",
 			Params: []kind{topKind, bytesKind | stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				encoding, src := c.value(0), c.bytes(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				encoding, src := c.Value(0), c.Bytes(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if err := encoding.Null(); err != nil {
 							return "", fmt.Errorf("base64: unsupported encoding: %v", err)
 						}
@@ -353,10 +353,10 @@
 			Name:   "Decode",
 			Params: []kind{topKind, stringKind},
 			Result: bytesKind | stringKind,
-			Func: func(c *callCtxt) {
-				encoding, s := c.value(0), c.string(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				encoding, s := c.Value(0), c.String(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if err := encoding.Null(); err != nil {
 							return nil, fmt.Errorf("base64: unsupported encoding: %v", err)
 						}
@@ -367,14 +367,14 @@
 		}},
 	},
 	"encoding/csv": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "Encode",
 			Params: []kind{topKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				x := c.value(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Value(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						buf := &bytes.Buffer{}
 						w := csv.NewWriter(buf)
 						iter, err := x.List()
@@ -410,10 +410,10 @@
 			Name:   "Decode",
 			Params: []kind{bytesKind | stringKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				r := c.reader(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				r := c.Reader(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return csv.NewReader(r).ReadAll()
 					}()
 				}
@@ -421,14 +421,14 @@
 		}},
 	},
 	"encoding/hex": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "EncodedLen",
 			Params: []kind{intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				n := c.int(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				n := c.Int(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return hex.EncodedLen(n)
 					}()
 				}
@@ -437,10 +437,10 @@
 			Name:   "DecodedLen",
 			Params: []kind{intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				x := c.int(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Int(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return hex.DecodedLen(x)
 					}()
 				}
@@ -449,10 +449,10 @@
 			Name:   "Decode",
 			Params: []kind{stringKind},
 			Result: bytesKind | stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return hex.DecodeString(s)
 					}()
 				}
@@ -461,10 +461,10 @@
 			Name:   "Dump",
 			Params: []kind{bytesKind | stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				data := c.bytes(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				data := c.Bytes(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return hex.Dump(data)
 					}()
 				}
@@ -473,10 +473,10 @@
 			Name:   "Encode",
 			Params: []kind{bytesKind | stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				src := c.bytes(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				src := c.Bytes(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return hex.EncodeToString(src)
 					}()
 				}
@@ -484,14 +484,14 @@
 		}},
 	},
 	"encoding/json": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "Valid",
 			Params: []kind{bytesKind | stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				data := c.bytes(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				data := c.Bytes(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return json.Valid(data)
 					}()
 				}
@@ -500,10 +500,10 @@
 			Name:   "Compact",
 			Params: []kind{bytesKind | stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				src := c.bytes(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				src := c.Bytes(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						dst := bytes.Buffer{}
 						if err := json.Compact(&dst, src); err != nil {
 							return "", err
@@ -516,10 +516,10 @@
 			Name:   "Indent",
 			Params: []kind{bytesKind | stringKind, stringKind, stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				src, prefix, indent := c.bytes(0), c.string(1), c.string(2)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				src, prefix, indent := c.Bytes(0), c.String(1), c.String(2)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						dst := bytes.Buffer{}
 						if err := json.Indent(&dst, src, prefix, indent); err != nil {
 							return "", err
@@ -532,10 +532,10 @@
 			Name:   "HTMLEscape",
 			Params: []kind{bytesKind | stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				src := c.bytes(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				src := c.Bytes(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						dst := &bytes.Buffer{}
 						json.HTMLEscape(dst, src)
 						return dst.String()
@@ -546,10 +546,10 @@
 			Name:   "Marshal",
 			Params: []kind{topKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				v := c.value(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				v := c.Value(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						b, err := json.Marshal(v)
 						return string(b), err
 					}()
@@ -559,10 +559,10 @@
 			Name:   "MarshalStream",
 			Params: []kind{topKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				v := c.value(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				v := c.Value(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 
 						iter, err := v.List()
 						if err != nil {
@@ -585,10 +585,10 @@
 			Name:   "Unmarshal",
 			Params: []kind{bytesKind | stringKind},
 			Result: topKind,
-			Func: func(c *callCtxt) {
-				b := c.bytes(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				b := c.Bytes(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if !json.Valid(b) {
 							return nil, fmt.Errorf("json: invalid JSON")
 						}
@@ -605,10 +605,10 @@
 			Name:   "Validate",
 			Params: []kind{bytesKind | stringKind, topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				b, v := c.bytes(0), c.value(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				b, v := c.Bytes(0), c.Value(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if !json.Valid(b) {
 							return false, fmt.Errorf("json: invalid JSON")
 						}
@@ -631,14 +631,14 @@
 		}},
 	},
 	"encoding/yaml": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "Marshal",
 			Params: []kind{topKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				v := c.value(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				v := c.Value(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if err := v.Validate(Concrete(true)); err != nil {
 							if err := v.Validate(); err != nil {
 								return "", err
@@ -655,10 +655,10 @@
 			Name:   "MarshalStream",
 			Params: []kind{topKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				v := c.value(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				v := c.Value(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 
 						iter, err := v.List()
 						if err != nil {
@@ -691,10 +691,10 @@
 			Name:   "Unmarshal",
 			Params: []kind{bytesKind | stringKind},
 			Result: topKind,
-			Func: func(c *callCtxt) {
-				data := c.bytes(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				data := c.Bytes(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return yaml.Unmarshal("", data)
 					}()
 				}
@@ -703,10 +703,10 @@
 			Name:   "Validate",
 			Params: []kind{bytesKind | stringKind, topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				b, v := c.bytes(0), c.value(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				b, v := c.Bytes(0), c.Value(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						d, err := yaml.NewDecoder("yaml.Validate", b)
 						if err != nil {
 							return false, err
@@ -742,10 +742,10 @@
 			Name:   "ValidatePartial",
 			Params: []kind{bytesKind | stringKind, topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				b, v := c.bytes(0), c.value(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				b, v := c.Bytes(0), c.Value(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						d, err := yaml.NewDecoder("yaml.ValidatePartial", b)
 						if err != nil {
 							return false, err
@@ -775,14 +775,14 @@
 		}},
 	},
 	"html": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "Escape",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return html.EscapeString(s)
 					}()
 				}
@@ -791,10 +791,10 @@
 			Name:   "Unescape",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return html.UnescapeString(s)
 					}()
 				}
@@ -802,14 +802,14 @@
 		}},
 	},
 	"list": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "Drop",
 			Params: []kind{listKind, intKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				x, n := c.list(0), c.int(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x, n := c.List(0), c.Int(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if n < 0 {
 							return nil, fmt.Errorf("negative index")
 						}
@@ -826,10 +826,10 @@
 			Name:   "FlattenN",
 			Params: []kind{topKind, intKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				xs, depth := c.value(0), c.int(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				xs, depth := c.Value(0), c.Int(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var flattenN func(Value, int) ([]Value, error)
 						flattenN = func(xs Value, depth int) ([]Value, error) {
 							var res []Value
@@ -860,10 +860,10 @@
 			Name:   "Take",
 			Params: []kind{listKind, intKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				x, n := c.list(0), c.int(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x, n := c.List(0), c.Int(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if n < 0 {
 							return nil, fmt.Errorf("negative index")
 						}
@@ -880,10 +880,10 @@
 			Name:   "Slice",
 			Params: []kind{listKind, intKind, intKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				x, i, j := c.list(0), c.int(1), c.int(2)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x, i, j := c.List(0), c.Int(1), c.Int(2)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if i < 0 {
 							return nil, fmt.Errorf("negative index")
 						}
@@ -908,10 +908,10 @@
 			Name:   "MinItems",
 			Params: []kind{listKind, intKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				a, n := c.list(0), c.int(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				a, n := c.List(0), c.Int(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return len(a) >= n
 					}()
 				}
@@ -920,10 +920,10 @@
 			Name:   "MaxItems",
 			Params: []kind{listKind, intKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				a, n := c.list(0), c.int(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				a, n := c.List(0), c.Int(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return len(a) <= n
 					}()
 				}
@@ -932,10 +932,10 @@
 			Name:   "UniqueItems",
 			Params: []kind{listKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				a := c.list(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				a := c.List(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						b := []string{}
 						for _, v := range a {
 							b = append(b, fmt.Sprint(v))
@@ -954,10 +954,10 @@
 			Name:   "Contains",
 			Params: []kind{listKind, topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				a, v := c.list(0), c.value(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				a, v := c.List(0), c.Value(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						for _, w := range a {
 							if v.Equals(w) {
 								return true
@@ -971,10 +971,10 @@
 			Name:   "Avg",
 			Params: []kind{listKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				xs := c.decimalList(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				xs := c.DecimalList(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if 0 == len(xs) {
 							return nil, fmt.Errorf("empty list")
 						}
@@ -1001,10 +1001,10 @@
 			Name:   "Max",
 			Params: []kind{listKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				xs := c.decimalList(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				xs := c.DecimalList(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if 0 == len(xs) {
 							return nil, fmt.Errorf("empty list")
 						}
@@ -1023,10 +1023,10 @@
 			Name:   "Min",
 			Params: []kind{listKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				xs := c.decimalList(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				xs := c.DecimalList(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if 0 == len(xs) {
 							return nil, fmt.Errorf("empty list")
 						}
@@ -1045,10 +1045,10 @@
 			Name:   "Product",
 			Params: []kind{listKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				xs := c.decimalList(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				xs := c.DecimalList(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						d := apd.New(1, 0)
 						for _, x := range xs {
 							_, err := internal.BaseContext.Mul(d, x, d)
@@ -1064,10 +1064,10 @@
 			Name:   "Range",
 			Params: []kind{numKind, numKind, numKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				start, limit, step := c.decimal(0), c.decimal(1), c.decimal(2)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				start, limit, step := c.Decimal(0), c.Decimal(1), c.Decimal(2)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if step.IsZero() {
 							return nil, fmt.Errorf("step must be non zero")
 						}
@@ -1107,10 +1107,10 @@
 			Name:   "Sum",
 			Params: []kind{listKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				xs := c.decimalList(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				xs := c.DecimalList(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						d := apd.New(0, 0)
 						for _, x := range xs {
 							_, err := internal.BaseContext.Add(d, x, d)
@@ -1126,10 +1126,10 @@
 			Name:   "Sort",
 			Params: []kind{listKind, topKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				list, cmp := c.list(0), c.value(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				list, cmp := c.List(0), c.Value(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						s := valueSorter{list, cmp, nil}
 
 						sort.Sort(&s)
@@ -1141,10 +1141,10 @@
 			Name:   "SortStable",
 			Params: []kind{listKind, topKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				list, cmp := c.list(0), c.value(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				list, cmp := c.List(0), c.Value(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						s := valueSorter{list, cmp, nil}
 						sort.Stable(&s)
 						return s.ret()
@@ -1155,10 +1155,10 @@
 			Name:   "SortStrings",
 			Params: []kind{listKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				a := c.strList(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				a := c.StringList(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						sort.Strings(a)
 						return a
 					}()
@@ -1168,10 +1168,10 @@
 			Name:   "IsSorted",
 			Params: []kind{listKind, topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				list, cmp := c.list(0), c.value(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				list, cmp := c.List(0), c.Value(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						s := valueSorter{list, cmp, nil}
 						return sort.IsSorted(&s)
 					}()
@@ -1181,16 +1181,16 @@
 			Name:   "IsSortedStrings",
 			Params: []kind{listKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				a := c.strList(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				a := c.StringList(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return sort.StringsAreSorted(a)
 					}()
 				}
 			},
 		}},
-		cue: `{
+		CUE: `{
 	Comparer: {
 		T:    _
 		less: bool
@@ -1214,7 +1214,7 @@
 }`,
 	},
 	"math": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:  "MaxExp",
 			Const: "2147483647",
 		}, {
@@ -1254,10 +1254,10 @@
 			Name:   "Jacobi",
 			Params: []kind{intKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				x, y := c.bigInt(0), c.bigInt(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x, y := c.BigInt(0), c.BigInt(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return big.Jacobi(x, y)
 					}()
 				}
@@ -1269,10 +1269,10 @@
 			Name:   "Floor",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := apdContext.Floor(&d, x)
 						return &d, err
@@ -1283,10 +1283,10 @@
 			Name:   "Ceil",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := apdContext.Ceil(&d, x)
 						return &d, err
@@ -1297,10 +1297,10 @@
 			Name:   "Trunc",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := roundTruncContext.RoundToIntegralExact(&d, x)
 						return &d, err
@@ -1311,10 +1311,10 @@
 			Name:   "Round",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := roundUpContext.RoundToIntegralExact(&d, x)
 						return &d, err
@@ -1325,10 +1325,10 @@
 			Name:   "RoundToEven",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := roundEvenContext.RoundToIntegralExact(&d, x)
 						return &d, err
@@ -1339,10 +1339,10 @@
 			Name:   "MultipleOf",
 			Params: []kind{numKind, numKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				x, y := c.decimal(0), c.decimal(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x, y := c.Decimal(0), c.Decimal(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d apd.Decimal
 						cond, err := mulContext.Quo(&d, x, y)
 						return !cond.Inexact(), err
@@ -1353,10 +1353,10 @@
 			Name:   "Abs",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := apdContext.Abs(&d, x)
 						return &d, err
@@ -1367,10 +1367,10 @@
 			Name:   "Acosh",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Acosh(x)
 					}()
 				}
@@ -1379,10 +1379,10 @@
 			Name:   "Asin",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Asin(x)
 					}()
 				}
@@ -1391,10 +1391,10 @@
 			Name:   "Acos",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Acos(x)
 					}()
 				}
@@ -1403,10 +1403,10 @@
 			Name:   "Asinh",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Asinh(x)
 					}()
 				}
@@ -1415,10 +1415,10 @@
 			Name:   "Atan",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Atan(x)
 					}()
 				}
@@ -1427,10 +1427,10 @@
 			Name:   "Atan2",
 			Params: []kind{numKind, numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				y, x := c.float64(0), c.float64(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				y, x := c.Float64(0), c.Float64(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Atan2(y, x)
 					}()
 				}
@@ -1439,10 +1439,10 @@
 			Name:   "Atanh",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Atanh(x)
 					}()
 				}
@@ -1451,10 +1451,10 @@
 			Name:   "Cbrt",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := apdContext.Cbrt(&d, x)
 						return &d, err
@@ -1498,10 +1498,10 @@
 			Name:   "Copysign",
 			Params: []kind{numKind, numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x, y := c.decimal(0), c.decimal(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x, y := c.Decimal(0), c.Decimal(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						var d internal.Decimal
 						d.Set(x)
 						d.Negative = y.Negative
@@ -1513,10 +1513,10 @@
 			Name:   "Dim",
 			Params: []kind{numKind, numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x, y := c.decimal(0), c.decimal(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x, y := c.Decimal(0), c.Decimal(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := apdContext.Sub(&d, x, y)
 						if err != nil {
@@ -1533,10 +1533,10 @@
 			Name:   "Erf",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Erf(x)
 					}()
 				}
@@ -1545,10 +1545,10 @@
 			Name:   "Erfc",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Erfc(x)
 					}()
 				}
@@ -1557,10 +1557,10 @@
 			Name:   "Erfinv",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Erfinv(x)
 					}()
 				}
@@ -1569,10 +1569,10 @@
 			Name:   "Erfcinv",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Erfcinv(x)
 					}()
 				}
@@ -1581,10 +1581,10 @@
 			Name:   "Exp",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := apdContext.Exp(&d, x)
 						return &d, err
@@ -1595,10 +1595,10 @@
 			Name:   "Exp2",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := apdContext.Pow(&d, two, x)
 						return &d, err
@@ -1609,10 +1609,10 @@
 			Name:   "Expm1",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Expm1(x)
 					}()
 				}
@@ -1621,10 +1621,10 @@
 			Name:   "Gamma",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Gamma(x)
 					}()
 				}
@@ -1633,10 +1633,10 @@
 			Name:   "Hypot",
 			Params: []kind{numKind, numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				p, q := c.float64(0), c.float64(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				p, q := c.Float64(0), c.Float64(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Hypot(p, q)
 					}()
 				}
@@ -1645,10 +1645,10 @@
 			Name:   "J0",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.J0(x)
 					}()
 				}
@@ -1657,10 +1657,10 @@
 			Name:   "Y0",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Y0(x)
 					}()
 				}
@@ -1669,10 +1669,10 @@
 			Name:   "J1",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.J1(x)
 					}()
 				}
@@ -1681,10 +1681,10 @@
 			Name:   "Y1",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Y1(x)
 					}()
 				}
@@ -1693,10 +1693,10 @@
 			Name:   "Jn",
 			Params: []kind{intKind, numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				n, x := c.int(0), c.float64(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				n, x := c.Int(0), c.Float64(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Jn(n, x)
 					}()
 				}
@@ -1705,10 +1705,10 @@
 			Name:   "Yn",
 			Params: []kind{intKind, numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				n, x := c.int(0), c.float64(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				n, x := c.Int(0), c.Float64(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Yn(n, x)
 					}()
 				}
@@ -1717,10 +1717,10 @@
 			Name:   "Ldexp",
 			Params: []kind{numKind, intKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				frac, exp := c.float64(0), c.int(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				frac, exp := c.Float64(0), c.Int(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Ldexp(frac, exp)
 					}()
 				}
@@ -1729,10 +1729,10 @@
 			Name:   "Log",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := apdContext.Ln(&d, x)
 						return &d, err
@@ -1743,10 +1743,10 @@
 			Name:   "Log10",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := apdContext.Log10(&d, x)
 						return &d, err
@@ -1757,10 +1757,10 @@
 			Name:   "Log2",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d, ln2 internal.Decimal
 						_, _ = apdContext.Ln(&ln2, two)
 						_, err := apdContext.Ln(&d, x)
@@ -1776,10 +1776,10 @@
 			Name:   "Log1p",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Log1p(x)
 					}()
 				}
@@ -1788,10 +1788,10 @@
 			Name:   "Logb",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Logb(x)
 					}()
 				}
@@ -1800,10 +1800,10 @@
 			Name:   "Ilogb",
 			Params: []kind{numKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Ilogb(x)
 					}()
 				}
@@ -1812,10 +1812,10 @@
 			Name:   "Mod",
 			Params: []kind{numKind, numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x, y := c.float64(0), c.float64(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x, y := c.Float64(0), c.Float64(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Mod(x, y)
 					}()
 				}
@@ -1824,10 +1824,10 @@
 			Name:   "Pow",
 			Params: []kind{numKind, numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x, y := c.decimal(0), c.decimal(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x, y := c.Decimal(0), c.Decimal(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var d internal.Decimal
 						_, err := apdContext.Pow(&d, x, y)
 						return &d, err
@@ -1838,10 +1838,10 @@
 			Name:   "Pow10",
 			Params: []kind{intKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				n := c.int32(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				n := c.Int32(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return apd.New(1, n)
 					}()
 				}
@@ -1850,10 +1850,10 @@
 			Name:   "Remainder",
 			Params: []kind{numKind, numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x, y := c.float64(0), c.float64(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x, y := c.Float64(0), c.Float64(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Remainder(x, y)
 					}()
 				}
@@ -1862,10 +1862,10 @@
 			Name:   "Signbit",
 			Params: []kind{numKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				x := c.decimal(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Decimal(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return x.Negative
 					}()
 				}
@@ -1874,10 +1874,10 @@
 			Name:   "Cos",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Cos(x)
 					}()
 				}
@@ -1886,10 +1886,10 @@
 			Name:   "Sin",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Sin(x)
 					}()
 				}
@@ -1898,10 +1898,10 @@
 			Name:   "Sinh",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Sinh(x)
 					}()
 				}
@@ -1910,10 +1910,10 @@
 			Name:   "Cosh",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Cosh(x)
 					}()
 				}
@@ -1922,10 +1922,10 @@
 			Name:   "Sqrt",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Sqrt(x)
 					}()
 				}
@@ -1934,10 +1934,10 @@
 			Name:   "Tan",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Tan(x)
 					}()
 				}
@@ -1946,10 +1946,10 @@
 			Name:   "Tanh",
 			Params: []kind{numKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				x := c.float64(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.Float64(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return math.Tanh(x)
 					}()
 				}
@@ -1957,14 +1957,14 @@
 		}},
 	},
 	"math/bits": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "Lsh",
 			Params: []kind{intKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				x, n := c.bigInt(0), c.uint(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x, n := c.BigInt(0), c.Uint(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						var z big.Int
 						z.Lsh(x, n)
 						return &z
@@ -1975,10 +1975,10 @@
 			Name:   "Rsh",
 			Params: []kind{intKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				x, n := c.bigInt(0), c.uint(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x, n := c.BigInt(0), c.Uint(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						var z big.Int
 						z.Rsh(x, n)
 						return &z
@@ -1989,10 +1989,10 @@
 			Name:   "At",
 			Params: []kind{intKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				x, i := c.bigInt(0), c.uint(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				x, i := c.BigInt(0), c.Uint(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if i > math.MaxInt32 {
 							return 0, fmt.Errorf("bit index too large")
 						}
@@ -2004,10 +2004,10 @@
 			Name:   "Set",
 			Params: []kind{intKind, intKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				x, i, bit := c.bigInt(0), c.int(1), c.uint(2)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x, i, bit := c.BigInt(0), c.Int(1), c.Uint(2)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						var z big.Int
 						z.SetBit(x, i, bit)
 						return &z
@@ -2018,10 +2018,10 @@
 			Name:   "And",
 			Params: []kind{intKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				a, b := c.bigInt(0), c.bigInt(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				a, b := c.BigInt(0), c.BigInt(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						var z big.Int
 						z.And(a, b)
 						return &z
@@ -2032,10 +2032,10 @@
 			Name:   "Or",
 			Params: []kind{intKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				a, b := c.bigInt(0), c.bigInt(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				a, b := c.BigInt(0), c.BigInt(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						var z big.Int
 						z.Or(a, b)
 						return &z
@@ -2046,10 +2046,10 @@
 			Name:   "Xor",
 			Params: []kind{intKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				a, b := c.bigInt(0), c.bigInt(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				a, b := c.BigInt(0), c.BigInt(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						var z big.Int
 						z.Xor(a, b)
 						return &z
@@ -2060,10 +2060,10 @@
 			Name:   "Clear",
 			Params: []kind{intKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				a, b := c.bigInt(0), c.bigInt(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				a, b := c.BigInt(0), c.BigInt(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						var z big.Int
 						z.AndNot(a, b)
 						return &z
@@ -2074,10 +2074,10 @@
 			Name:   "OnesCount",
 			Params: []kind{intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				x := c.bigInt(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.BigInt(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						var count int
 						for _, w := range x.Bits() {
 							count += bits.OnesCount64(uint64(w))
@@ -2090,10 +2090,10 @@
 			Name:   "Len",
 			Params: []kind{intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				x := c.bigInt(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				x := c.BigInt(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return x.BitLen()
 					}()
 				}
@@ -2101,14 +2101,14 @@
 		}},
 	},
 	"net": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "SplitHostPort",
 			Params: []kind{stringKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						host, port, err := net.SplitHostPort(s)
 						if err != nil {
 							return nil, err
@@ -2121,10 +2121,10 @@
 			Name:   "JoinHostPort",
 			Params: []kind{topKind, topKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				host, port := c.value(0), c.value(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				host, port := c.Value(0), c.Value(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						var err error
 						hostStr := ""
 						switch host.Kind() {
@@ -2170,10 +2170,10 @@
 			Name:   "FQDN",
 			Params: []kind{stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						for i := 0; i < len(s); i++ {
 							if s[i] >= utf8.RuneSelf {
 								return false
@@ -2194,10 +2194,10 @@
 			Name:   "ParseIP",
 			Params: []kind{stringKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						goip := net.ParseIP(s)
 						if goip == nil {
 							return nil, fmt.Errorf("invalid IP address %q", s)
@@ -2210,10 +2210,10 @@
 			Name:   "IPv4",
 			Params: []kind{topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				ip := c.value(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				ip := c.Value(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 
 						return netGetIP(ip).To4() != nil
 					}()
@@ -2223,10 +2223,10 @@
 			Name:   "IP",
 			Params: []kind{topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				ip := c.value(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				ip := c.Value(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 
 						return netGetIP(ip) != nil
 					}()
@@ -2236,10 +2236,10 @@
 			Name:   "LoopbackIP",
 			Params: []kind{topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				ip := c.value(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				ip := c.Value(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return netGetIP(ip).IsLoopback()
 					}()
 				}
@@ -2248,10 +2248,10 @@
 			Name:   "MulticastIP",
 			Params: []kind{topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				ip := c.value(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				ip := c.Value(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return netGetIP(ip).IsMulticast()
 					}()
 				}
@@ -2260,10 +2260,10 @@
 			Name:   "InterfaceLocalMulticastIP",
 			Params: []kind{topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				ip := c.value(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				ip := c.Value(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return netGetIP(ip).IsInterfaceLocalMulticast()
 					}()
 				}
@@ -2272,10 +2272,10 @@
 			Name:   "LinkLocalMulticastIP",
 			Params: []kind{topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				ip := c.value(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				ip := c.Value(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return netGetIP(ip).IsLinkLocalMulticast()
 					}()
 				}
@@ -2284,10 +2284,10 @@
 			Name:   "LinkLocalUnicastIP",
 			Params: []kind{topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				ip := c.value(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				ip := c.Value(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return netGetIP(ip).IsLinkLocalUnicast()
 					}()
 				}
@@ -2296,10 +2296,10 @@
 			Name:   "GlobalUnicastIP",
 			Params: []kind{topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				ip := c.value(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				ip := c.Value(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return netGetIP(ip).IsGlobalUnicast()
 					}()
 				}
@@ -2308,10 +2308,10 @@
 			Name:   "UnspecifiedIP",
 			Params: []kind{topKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				ip := c.value(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				ip := c.Value(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return netGetIP(ip).IsUnspecified()
 					}()
 				}
@@ -2320,10 +2320,10 @@
 			Name:   "ToIP4",
 			Params: []kind{topKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				ip := c.value(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				ip := c.Value(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						ipdata := netGetIP(ip)
 						if ipdata == nil {
 							return nil, fmt.Errorf("invalid IP %q", ip)
@@ -2340,10 +2340,10 @@
 			Name:   "ToIP16",
 			Params: []kind{topKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				ip := c.value(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				ip := c.Value(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						ipdata := netGetIP(ip)
 						if ipdata == nil {
 							return nil, fmt.Errorf("invalid IP %q", ip)
@@ -2356,10 +2356,10 @@
 			Name:   "IPString",
 			Params: []kind{topKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				ip := c.value(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				ip := c.Value(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						ipdata := netGetIP(ip)
 						if ipdata == nil {
 							return "", fmt.Errorf("invalid IP %q", ip)
@@ -2371,14 +2371,14 @@
 		}},
 	},
 	"path": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "Split",
 			Params: []kind{stringKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				path := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				path := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						file, dir := split(path)
 						return []string{file, dir}
 					}()
@@ -2388,10 +2388,10 @@
 			Name:   "Match",
 			Params: []kind{stringKind, stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				pattern, name := c.string(0), c.string(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				pattern, name := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return path.Match(pattern, name)
 					}()
 				}
@@ -2400,10 +2400,10 @@
 			Name:   "Clean",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				path := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				path := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return pathClean(path)
 					}()
 				}
@@ -2412,10 +2412,10 @@
 			Name:   "Ext",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				path := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				path := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return pathExt(path)
 					}()
 				}
@@ -2424,10 +2424,10 @@
 			Name:   "Base",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				path := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				path := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return pathBase(path)
 					}()
 				}
@@ -2436,10 +2436,10 @@
 			Name:   "IsAbs",
 			Params: []kind{stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				path := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				path := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return pathIsAbs(path)
 					}()
 				}
@@ -2448,10 +2448,10 @@
 			Name:   "Dir",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				path := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				path := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return pathDir(path)
 					}()
 				}
@@ -2459,14 +2459,14 @@
 		}},
 	},
 	"regexp": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "Valid",
 			Params: []kind{stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				pattern := c.string(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				pattern := c.String(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						_, err := regexp.Compile(pattern)
 						return err == nil, err
 					}()
@@ -2476,10 +2476,10 @@
 			Name:   "Find",
 			Params: []kind{stringKind, stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				pattern, s := c.string(0), c.string(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				pattern, s := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						re, err := regexp.Compile(pattern)
 						if err != nil {
 							return "", err
@@ -2496,10 +2496,10 @@
 			Name:   "FindAll",
 			Params: []kind{stringKind, stringKind, intKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				pattern, s, n := c.string(0), c.string(1), c.int(2)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				pattern, s, n := c.String(0), c.String(1), c.Int(2)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						re, err := regexp.Compile(pattern)
 						if err != nil {
 							return nil, err
@@ -2516,10 +2516,10 @@
 			Name:   "FindSubmatch",
 			Params: []kind{stringKind, stringKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				pattern, s := c.string(0), c.string(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				pattern, s := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						re, err := regexp.Compile(pattern)
 						if err != nil {
 							return nil, err
@@ -2536,10 +2536,10 @@
 			Name:   "FindAllSubmatch",
 			Params: []kind{stringKind, stringKind, intKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				pattern, s, n := c.string(0), c.string(1), c.int(2)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				pattern, s, n := c.String(0), c.String(1), c.Int(2)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						re, err := regexp.Compile(pattern)
 						if err != nil {
 							return nil, err
@@ -2556,10 +2556,10 @@
 			Name:   "FindNamedSubmatch",
 			Params: []kind{stringKind, stringKind},
 			Result: structKind,
-			Func: func(c *callCtxt) {
-				pattern, s := c.string(0), c.string(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				pattern, s := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						re, err := regexp.Compile(pattern)
 						if err != nil {
 							return nil, err
@@ -2586,10 +2586,10 @@
 			Name:   "FindAllNamedSubmatch",
 			Params: []kind{stringKind, stringKind, intKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				pattern, s, n := c.string(0), c.string(1), c.int(2)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				pattern, s, n := c.String(0), c.String(1), c.Int(2)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						re, err := regexp.Compile(pattern)
 						if err != nil {
 							return nil, err
@@ -2620,10 +2620,10 @@
 			Name:   "Match",
 			Params: []kind{stringKind, stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				pattern, s := c.string(0), c.string(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				pattern, s := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return regexp.MatchString(pattern, s)
 					}()
 				}
@@ -2632,10 +2632,10 @@
 			Name:   "QuoteMeta",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return regexp.QuoteMeta(s)
 					}()
 				}
@@ -2643,14 +2643,14 @@
 		}},
 	},
 	"strconv": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "Unquote",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return literal.Unquote(s)
 					}()
 				}
@@ -2659,10 +2659,10 @@
 			Name:   "ParseBool",
 			Params: []kind{stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				str := c.string(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				str := c.String(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return strconv.ParseBool(str)
 					}()
 				}
@@ -2671,10 +2671,10 @@
 			Name:   "FormatBool",
 			Params: []kind{boolKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				b := c.bool(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				b := c.Bool(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strconv.FormatBool(b)
 					}()
 				}
@@ -2683,10 +2683,10 @@
 			Name:   "ParseFloat",
 			Params: []kind{stringKind, intKind},
 			Result: numKind,
-			Func: func(c *callCtxt) {
-				s, bitSize := c.string(0), c.int(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				s, bitSize := c.String(0), c.Int(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return strconv.ParseFloat(s, bitSize)
 					}()
 				}
@@ -2698,10 +2698,10 @@
 			Name:   "ParseUint",
 			Params: []kind{stringKind, intKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				s, base, bitSize := c.string(0), c.int(1), c.int(2)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				s, base, bitSize := c.String(0), c.Int(1), c.Int(2)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return strconv.ParseUint(s, base, bitSize)
 					}()
 				}
@@ -2710,10 +2710,10 @@
 			Name:   "ParseInt",
 			Params: []kind{stringKind, intKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				s, base, bitSize := c.string(0), c.int(1), c.int(2)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				s, base, bitSize := c.String(0), c.Int(1), c.Int(2)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return strconv.ParseInt(s, base, bitSize)
 					}()
 				}
@@ -2722,10 +2722,10 @@
 			Name:   "Atoi",
 			Params: []kind{stringKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return strconv.Atoi(s)
 					}()
 				}
@@ -2734,10 +2734,10 @@
 			Name:   "FormatFloat",
 			Params: []kind{numKind, intKind, intKind, intKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				f, fmt, prec, bitSize := c.float64(0), c.byte(1), c.int(2), c.int(3)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				f, fmt, prec, bitSize := c.Float64(0), c.Byte(1), c.Int(2), c.Int(3)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strconv.FormatFloat(f, fmt, prec, bitSize)
 					}()
 				}
@@ -2746,10 +2746,10 @@
 			Name:   "FormatUint",
 			Params: []kind{intKind, intKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				i, base := c.uint64(0), c.int(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				i, base := c.Uint64(0), c.Int(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strconv.FormatUint(i, base)
 					}()
 				}
@@ -2758,10 +2758,10 @@
 			Name:   "FormatInt",
 			Params: []kind{intKind, intKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				i, base := c.int64(0), c.int(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				i, base := c.Int64(0), c.Int(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strconv.FormatInt(i, base)
 					}()
 				}
@@ -2770,10 +2770,10 @@
 			Name:   "Quote",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strconv.Quote(s)
 					}()
 				}
@@ -2782,10 +2782,10 @@
 			Name:   "QuoteToASCII",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strconv.QuoteToASCII(s)
 					}()
 				}
@@ -2794,10 +2794,10 @@
 			Name:   "QuoteToGraphic",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strconv.QuoteToGraphic(s)
 					}()
 				}
@@ -2806,10 +2806,10 @@
 			Name:   "QuoteRune",
 			Params: []kind{intKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				r := c.rune(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				r := c.Rune(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strconv.QuoteRune(r)
 					}()
 				}
@@ -2818,10 +2818,10 @@
 			Name:   "QuoteRuneToASCII",
 			Params: []kind{intKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				r := c.rune(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				r := c.Rune(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strconv.QuoteRuneToASCII(r)
 					}()
 				}
@@ -2830,10 +2830,10 @@
 			Name:   "QuoteRuneToGraphic",
 			Params: []kind{intKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				r := c.rune(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				r := c.Rune(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strconv.QuoteRuneToGraphic(r)
 					}()
 				}
@@ -2842,10 +2842,10 @@
 			Name:   "IsPrint",
 			Params: []kind{intKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				r := c.rune(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				r := c.Rune(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strconv.IsPrint(r)
 					}()
 				}
@@ -2854,10 +2854,10 @@
 			Name:   "IsGraphic",
 			Params: []kind{intKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				r := c.rune(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				r := c.Rune(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strconv.IsGraphic(r)
 					}()
 				}
@@ -2865,14 +2865,14 @@
 		}},
 	},
 	"strings": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "ByteAt",
 			Params: []kind{bytesKind | stringKind, intKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				b, i := c.bytes(0), c.int(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				b, i := c.Bytes(0), c.Int(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if i < 0 || i >= len(b) {
 							return 0, fmt.Errorf("index out of range")
 						}
@@ -2884,10 +2884,10 @@
 			Name:   "ByteSlice",
 			Params: []kind{bytesKind | stringKind, intKind, intKind},
 			Result: bytesKind | stringKind,
-			Func: func(c *callCtxt) {
-				b, start, end := c.bytes(0), c.int(1), c.int(2)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				b, start, end := c.Bytes(0), c.Int(1), c.Int(2)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if start < 0 || start > end || end > len(b) {
 							return nil, fmt.Errorf("index out of range")
 						}
@@ -2899,10 +2899,10 @@
 			Name:   "Runes",
 			Params: []kind{stringKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return []rune(s)
 					}()
 				}
@@ -2911,10 +2911,10 @@
 			Name:   "MinRunes",
 			Params: []kind{stringKind, intKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				s, min := c.string(0), c.int(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, min := c.String(0), c.Int(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 
 						return len([]rune(s)) >= min
 					}()
@@ -2924,10 +2924,10 @@
 			Name:   "MaxRunes",
 			Params: []kind{stringKind, intKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				s, max := c.string(0), c.int(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, max := c.String(0), c.Int(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 
 						return len([]rune(s)) <= max
 					}()
@@ -2937,10 +2937,10 @@
 			Name:   "ToTitle",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 
 						prev := ' '
 						return strings.Map(
@@ -2960,10 +2960,10 @@
 			Name:   "ToCamel",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 
 						prev := ' '
 						return strings.Map(
@@ -2983,10 +2983,10 @@
 			Name:   "SliceRunes",
 			Params: []kind{stringKind, intKind, intKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s, start, end := c.string(0), c.int(1), c.int(2)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				s, start, end := c.String(0), c.Int(1), c.Int(2)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						runes := []rune(s)
 						if start < 0 || start > end || end > len(runes) {
 							return "", fmt.Errorf("index out of range")
@@ -2999,10 +2999,10 @@
 			Name:   "Compare",
 			Params: []kind{stringKind, stringKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				a, b := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				a, b := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.Compare(a, b)
 					}()
 				}
@@ -3011,10 +3011,10 @@
 			Name:   "Count",
 			Params: []kind{stringKind, stringKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				s, substr := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, substr := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.Count(s, substr)
 					}()
 				}
@@ -3023,10 +3023,10 @@
 			Name:   "Contains",
 			Params: []kind{stringKind, stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				s, substr := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, substr := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.Contains(s, substr)
 					}()
 				}
@@ -3035,10 +3035,10 @@
 			Name:   "ContainsAny",
 			Params: []kind{stringKind, stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				s, chars := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, chars := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.ContainsAny(s, chars)
 					}()
 				}
@@ -3047,10 +3047,10 @@
 			Name:   "LastIndex",
 			Params: []kind{stringKind, stringKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				s, substr := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, substr := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.LastIndex(s, substr)
 					}()
 				}
@@ -3059,10 +3059,10 @@
 			Name:   "IndexAny",
 			Params: []kind{stringKind, stringKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				s, chars := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, chars := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.IndexAny(s, chars)
 					}()
 				}
@@ -3071,10 +3071,10 @@
 			Name:   "LastIndexAny",
 			Params: []kind{stringKind, stringKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				s, chars := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, chars := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.LastIndexAny(s, chars)
 					}()
 				}
@@ -3083,10 +3083,10 @@
 			Name:   "SplitN",
 			Params: []kind{stringKind, stringKind, intKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				s, sep, n := c.string(0), c.string(1), c.int(2)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, sep, n := c.String(0), c.String(1), c.Int(2)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.SplitN(s, sep, n)
 					}()
 				}
@@ -3095,10 +3095,10 @@
 			Name:   "SplitAfterN",
 			Params: []kind{stringKind, stringKind, intKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				s, sep, n := c.string(0), c.string(1), c.int(2)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, sep, n := c.String(0), c.String(1), c.Int(2)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.SplitAfterN(s, sep, n)
 					}()
 				}
@@ -3107,10 +3107,10 @@
 			Name:   "Split",
 			Params: []kind{stringKind, stringKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				s, sep := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, sep := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.Split(s, sep)
 					}()
 				}
@@ -3119,10 +3119,10 @@
 			Name:   "SplitAfter",
 			Params: []kind{stringKind, stringKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				s, sep := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, sep := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.SplitAfter(s, sep)
 					}()
 				}
@@ -3131,10 +3131,10 @@
 			Name:   "Fields",
 			Params: []kind{stringKind},
 			Result: listKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.Fields(s)
 					}()
 				}
@@ -3143,10 +3143,10 @@
 			Name:   "Join",
 			Params: []kind{listKind, stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				elems, sep := c.strList(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				elems, sep := c.StringList(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.Join(elems, sep)
 					}()
 				}
@@ -3155,10 +3155,10 @@
 			Name:   "HasPrefix",
 			Params: []kind{stringKind, stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				s, prefix := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, prefix := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.HasPrefix(s, prefix)
 					}()
 				}
@@ -3167,10 +3167,10 @@
 			Name:   "HasSuffix",
 			Params: []kind{stringKind, stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				s, suffix := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, suffix := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.HasSuffix(s, suffix)
 					}()
 				}
@@ -3179,10 +3179,10 @@
 			Name:   "Repeat",
 			Params: []kind{stringKind, intKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s, count := c.string(0), c.int(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, count := c.String(0), c.Int(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.Repeat(s, count)
 					}()
 				}
@@ -3191,10 +3191,10 @@
 			Name:   "ToUpper",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.ToUpper(s)
 					}()
 				}
@@ -3203,10 +3203,10 @@
 			Name:   "ToLower",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.ToLower(s)
 					}()
 				}
@@ -3215,10 +3215,10 @@
 			Name:   "Trim",
 			Params: []kind{stringKind, stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s, cutset := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, cutset := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.Trim(s, cutset)
 					}()
 				}
@@ -3227,10 +3227,10 @@
 			Name:   "TrimLeft",
 			Params: []kind{stringKind, stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s, cutset := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, cutset := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.TrimLeft(s, cutset)
 					}()
 				}
@@ -3239,10 +3239,10 @@
 			Name:   "TrimRight",
 			Params: []kind{stringKind, stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s, cutset := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, cutset := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.TrimRight(s, cutset)
 					}()
 				}
@@ -3251,10 +3251,10 @@
 			Name:   "TrimSpace",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.TrimSpace(s)
 					}()
 				}
@@ -3263,10 +3263,10 @@
 			Name:   "TrimPrefix",
 			Params: []kind{stringKind, stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s, prefix := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, prefix := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.TrimPrefix(s, prefix)
 					}()
 				}
@@ -3275,10 +3275,10 @@
 			Name:   "TrimSuffix",
 			Params: []kind{stringKind, stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s, suffix := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, suffix := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.TrimSuffix(s, suffix)
 					}()
 				}
@@ -3287,10 +3287,10 @@
 			Name:   "Replace",
 			Params: []kind{stringKind, stringKind, stringKind, intKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s, old, new, n := c.string(0), c.string(1), c.string(2), c.int(3)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, old, new, n := c.String(0), c.String(1), c.String(2), c.Int(3)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.Replace(s, old, new, n)
 					}()
 				}
@@ -3299,10 +3299,10 @@
 			Name:   "Index",
 			Params: []kind{stringKind, stringKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				s, substr := c.string(0), c.string(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s, substr := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return strings.Index(s, substr)
 					}()
 				}
@@ -3310,14 +3310,14 @@
 		}},
 	},
 	"struct": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "MinFields",
 			Params: []kind{structKind, intKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				object, n := c.structVal(0), c.int(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				object, n := c.Struct(0), c.Int(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						iter := object.Fields(Hidden(false), Optional(false))
 						count := 0
 						for iter.Next() {
@@ -3331,10 +3331,10 @@
 			Name:   "MaxFields",
 			Params: []kind{structKind, intKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				object, n := c.structVal(0), c.int(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				object, n := c.Struct(0), c.Int(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						iter := object.Fields(Hidden(false), Optional(false))
 						count := 0
 						for iter.Next() {
@@ -3347,14 +3347,14 @@
 		}},
 	},
 	"text/tabwriter": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "Write",
 			Params: []kind{topKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				data := c.value(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				data := c.Value(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						buf := &bytes.Buffer{}
 						tw := tabwriter.NewWriter(buf, 0, 4, 1, ' ', 0)
 
@@ -3394,14 +3394,14 @@
 		}},
 	},
 	"text/template": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:   "Execute",
 			Params: []kind{stringKind, topKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				templ, data := c.string(0), c.value(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				templ, data := c.String(0), c.Value(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						t, err := template.New("").Parse(templ)
 						if err != nil {
 							return "", err
@@ -3422,10 +3422,10 @@
 			Name:   "HTMLEscape",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return template.HTMLEscapeString(s)
 					}()
 				}
@@ -3434,10 +3434,10 @@
 			Name:   "JSEscape",
 			Params: []kind{stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						return template.JSEscapeString(s)
 					}()
 				}
@@ -3445,7 +3445,7 @@
 		}},
 	},
 	"time": {
-		native: []*builtin{{
+		Native: []*Builtin{{
 			Name:  "Nanosecond",
 			Const: "1",
 		}, {
@@ -3467,10 +3467,10 @@
 			Name:   "Duration",
 			Params: []kind{stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						if _, err := time.ParseDuration(s); err != nil {
 							return false, err
 						}
@@ -3482,10 +3482,10 @@
 			Name:   "ParseDuration",
 			Params: []kind{stringKind},
 			Result: intKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						d, err := time.ParseDuration(s)
 						if err != nil {
 							return 0, err
@@ -3594,10 +3594,10 @@
 			Name:   "Time",
 			Params: []kind{stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				s := c.string(0)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				s := c.String(0)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return timeFormat(s, time.RFC3339Nano)
 					}()
 				}
@@ -3606,10 +3606,10 @@
 			Name:   "Format",
 			Params: []kind{stringKind, stringKind},
 			Result: boolKind,
-			Func: func(c *callCtxt) {
-				value, layout := c.string(0), c.string(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				value, layout := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						return timeFormat(value, layout)
 					}()
 				}
@@ -3618,10 +3618,10 @@
 			Name:   "Parse",
 			Params: []kind{stringKind, stringKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				layout, value := c.string(0), c.string(1)
-				if c.do() {
-					c.ret, c.err = func() (interface{}, error) {
+			Func: func(c *CallCtxt) {
+				layout, value := c.String(0), c.String(1)
+				if c.Do() {
+					c.Ret, c.Err = func() (interface{}, error) {
 						t, err := time.Parse(layout, value)
 						if err != nil {
 							return "", err
@@ -3634,10 +3634,10 @@
 			Name:   "Unix",
 			Params: []kind{intKind, intKind},
 			Result: stringKind,
-			Func: func(c *callCtxt) {
-				sec, nsec := c.int64(0), c.int64(1)
-				if c.do() {
-					c.ret = func() interface{} {
+			Func: func(c *CallCtxt) {
+				sec, nsec := c.Int64(0), c.Int64(1)
+				if c.Do() {
+					c.Ret = func() interface{} {
 						t := time.Unix(sec, nsec)
 						return t.UTC().Format(time.RFC3339Nano)
 					}()
@@ -3646,8 +3646,8 @@
 		}},
 	},
 	"tool": {
-		native: []*builtin{},
-		cue: `{
+		Native: []*Builtin{},
+		CUE: `{
 	Command: {
 		$usage?: string
 		$short?: string
@@ -3666,8 +3666,8 @@
 }`,
 	},
 	"tool/cli": {
-		native: []*builtin{},
-		cue: `{
+		Native: []*Builtin{},
+		CUE: `{
 	Print: {
 		$id:  *"tool/cli.Print" | "print"
 		text: string
@@ -3675,8 +3675,8 @@
 }`,
 	},
 	"tool/exec": {
-		native: []*builtin{},
-		cue: `{
+		Native: []*Builtin{},
+		CUE: `{
 	Run: {
 		$id: *"tool/exec.Run" | "exec"
 		cmd: string | [string, ...string]
@@ -3691,8 +3691,8 @@
 }`,
 	},
 	"tool/file": {
-		native: []*builtin{},
-		cue: `{
+		Native: []*Builtin{},
+		CUE: `{
 	Read: {
 		$id:      "tool/file.Read"
 		filename: !=""
@@ -3718,8 +3718,8 @@
 }`,
 	},
 	"tool/http": {
-		native: []*builtin{},
-		cue: `{
+		Native: []*Builtin{},
+		CUE: `{
 	Get: Do & {
 		method: "GET"
 	}
@@ -3760,8 +3760,8 @@
 }`,
 	},
 	"tool/os": {
-		native: []*builtin{},
-		cue: `{
+		Native: []*Builtin{},
+		CUE: `{
 	Name:  !="" & !~"^[$]"
 	Value: bool | number | *string | null
 	Setenv: {
