vm/ops.go
func txFetchField(st *State) {
	container := st.sa
	if container == nil {
		// XXX ? no op?
		st.sa = nil
	} else {
		t := reflect.TypeOf(container)
		var f reflect.Value
		var v reflect.Value
		name := st.CurrentOp().ArgString()
		switch t.Kind() {
		case reflect.Ptr, reflect.Struct:
			// Uppercase first character of field name
			r, size := utf8.DecodeRuneInString(name)
			name = string(unicode.ToUpper(r)) + name[size:]

			v = reflect.ValueOf(container)
			if t.Kind() == reflect.Ptr {
				// dereference
				v = v.Elem()
			}

			if v.Type().Name() == "LoopVar" {
				// some special treatment here
				switch name {
				case "Max":
					name = "MaxIndex"
				case "Next":
					name = "PeekNext"
				case "Prev":
					name = "PeeekPrev"
				case "First":
					name = "IsFirst"
				case "Last":
					name = "IsLast"
				}
			}

			f = v.FieldByName(name)
		case reflect.Map:
			v = reflect.ValueOf(container)
			f = v.MapIndex(reflect.ValueOf(name))
		default:
			panic(fmt.Sprintf("XXX Put proper error handling here: %s (%s)", container, t))
		}

		st.sa = f.Interface()
	}
	st.Advance()
}
func txFetchField(st *State) {
	container := st.sa
	if container == nil {
		// XXX ? no op?
		st.sa = nil
	} else {
		t := reflect.TypeOf(container)
		var f reflect.Value
		var v reflect.Value
		name := st.CurrentOp().ArgString()
		switch t.Kind() {
		case reflect.Ptr, reflect.Struct:
			// Uppercase first character of field name
			r, size := utf8.DecodeRuneInString(name)
			name = string(unicode.ToUpper(r)) + name[size:]

			v = reflect.ValueOf(container)
			if t.Kind() == reflect.Ptr {
				// dereference
				v = v.Elem()
			}

			if v.Type().Name() == "LoopVar" {
				// some special treatment here
				switch name {
				case "Max":
					name = "MaxIndex"
				case "Next":
					name = "PeekNext"
				case "Prev":
					name = "PeeekPrev"
				case "First":
					name = "IsFirst"
				case "Last":
					name = "IsLast"
				}
			}

			f = v.FieldByName(name)
		case reflect.Map:
			v = reflect.ValueOf(container)
			f = v.MapIndex(reflect.ValueOf(name))
		default:
			panic(fmt.Sprintf("XXX Put proper error handling here: %s (%s)", container, t))
		}

		st.sa = f.Interface()
	}
	st.Advance()
}
// pushmark
// load_lvar 0
// push
// literal_i start
// push
// literal_i end
// push
// fetch_slice
/*
func txFetchSlice(st *State) {
  container := st.sa
  if container == nil {
    // XXX ? no op?
    st.sa = nil
  } else {
    v := reflect.ValueOf(container)
    v.Slice(
*/