func (fb *functionBuilder) emitCap(s, z int8) {
	fb.fn.Body = append(fb.fn.Body, runtime.Instruction{Op: runtime.OpCap, A: s, C: z})
}
emitCap appends a new "cap" instruction to the function body.

z = cap(s)
package compiler
import (
	"fmt"
	"reflect"
	"github.com/open2b/scriggo/ast"
	"github.com/open2b/scriggo/internal/runtime"
)
func (fb *functionBuilder) emitNop() {
	fb.fn.Body = append(fb.fn.Body, runtime.Instruction{Op: runtime.OpNone})
}
func (fb *functionBuilder) emitAdd(k bool, x, y, z int8, kind reflect.Kind) {
	var op runtime.Operation
	switch kind {
	case reflect.Int:
		op = runtime.OpAddInt
	case reflect.Float64:
		op = runtime.OpAddFloat64
	default:
		if z != x {
			panic(fmt.Errorf("z must be == x for kind %s", kind))
		}
		x = int8(flattenIntegerKind(kind))
		op = runtime.OpAdd
	}
	if k {
		op = -op
	}
	fb.fn.Body = append(fb.fn.Body, runtime.Instruction{Op: op, A: x, B: y, C: z})
}
func (fb *functionBuilder) emitAddr(expr, index, dest int8, pos *ast.Position) {
	fb.addPosAndPath(pos)
	fb.fn.Body = append(fb.fn.Body, runtime.Instruction{Op: runtime.OpAddr, A: expr, B: index, C: dest})
}
func (fb *functionBuilder) emitAnd(k bool, x, y, z int8, kind reflect.Kind) {
	op := runtime.OpAnd
	if k {
		op = -op
	}
	fb.fn.Body = append(fb.fn.Body, runtime.Instruction{Op: op, A: x, B: y, C: z})
}
func (fb *functionBuilder) emitAndNot(k bool, x, y, z int8, kind reflect.Kind) {
	op := runtime.OpAndNot
	if k {
		op = -op
	}
	fb.fn.Body = append(fb.fn.Body, runtime.Instruction{Op: op, A: x, B: y, C: z})
}
func (fb *functionBuilder) emitAppend(start, end, s int8, elementsKind reflect.Kind) {
	fb.addOperandKinds(elementsKind, elementsKind, 0)
	fn := fb.fn
	fn.Body = append(fn.Body, runtime.Instruction{Op: runtime.OpAppend, A: start, B: end, C: s})
}
func (fb *functionBuilder) emitAppendSlice(t, s int8, pos *ast.Position) {
	fb.addPosAndPath(pos)
	fn := fb.fn
	fn.Body = append(fn.Body, runtime.Instruction{Op: runtime.OpAppendSlice, A: t, C: s})
}
func (fb *functionBuilder) emitAssert(e int8, typ reflect.Type, z int8) {
	t := fb.addType(typ, true)
	fb.fn.Body = append(fb.fn.Body, runtime.Instruction{Op: runtime.OpAssert, A: e, B: int8(t), C: z})
}
func (fb *functionBuilder) emitBreak(lab label) {
	addr := fb.labelAddrs[lab-1]
	a, b, c := encodeUint24(uint32(addr))
	fb.fn.Body = append(fb.fn.Body, runtime.Instruction{Op: runtime.OpBreak, A: a, B: b, C: c})
}
func (fb *functionBuilder) emitCallFunc(f int8, shift runtime.StackShift, pos *ast.Position) {
	fb.addPosAndPath(pos)
	fn := fb.fn
	fn.Body = append(fn.Body, runtime.Instruction{Op: runtime.OpCallFunc, A: f})
	fn.Body = append(fn.Body, runtime.Instruction{Op: runtime.Operation(shift[0]), A: shift[1], B: shift[2], C: shift[3]})
}
func (fb *functionBuilder) emitCallMacro(f int8, shift runtime.StackShift, pos *ast.Position, toFormat ast.Format) {
	fb.addPosAndPath(pos)
	fn := fb.fn
	fn.Body = append(fn.Body, runtime.Instruction{Op: runtime.OpCallMacro, A: f, B: int8(toFormat)})
	fn.Body = append(fn.Body, runtime.Instruction{Op: runtime.Operation(shift[0]), A: shift[1], B: shift[2], C: shift[3]})
}
func (fb *functionBuilder) emitCallIndirect(f int8, numVariadic int8, shift runtime.StackShift, pos *ast.Position, funcType reflect.Type, toFormat ast.Format) {
	fb.addPosAndPath(pos)
	fb.addFunctionType(funcType)
	fn := fb.fn
	fn.Body = append(fn.Body, runtime.Instruction{Op: runtime.OpCallIndirect, A: f, B: int8(toFormat), C: numVariadic})
	fn.Body = append(fn.Body, runtime.Instruction{Op: runtime.Operation(shift[0]), A: shift[1], B: shift[2], C: shift[3]})
}
func (fb *functionBuilder) emitCallNative(f int8, numVariadic int8, shift runtime.StackShift, pos *ast.Position) {
	fb.addPosAndPath(pos)
	fn := fb.fn
	fn.Body = append(fn.Body, runtime.Instruction{Op: runtime.OpCallNative, A: f, C: numVariadic})
	fn.Body = append(fn.Body, runtime.Instruction{Op: runtime.Operation(shift[0]), A: shift[1], B: shift[2], C: shift[3]})
}