func typeFieldName(t *gocore.Type, off int64) string {
	switch t.Kind {
	case gocore.KindBool, gocore.KindInt, gocore.KindUint, gocore.KindFloat:
		return ""
	case gocore.KindComplex:
		if off == 0 {
			return ".real"
		}
		return ".imag"
	case gocore.KindIface, gocore.KindEface:
		if off == 0 {
			return ".type"
		}
		return ".data"
	case gocore.KindPtr, gocore.KindFunc:
		return ""
	case gocore.KindString:
		if off == 0 {
			return ".ptr"
		}
		return ".len"
	case gocore.KindSlice:
		if off == 0 {
			return ".ptr"
		}
		if off <= t.Size/2 {
			return ".len"
		}
		return ".cap"
	case gocore.KindArray:
		s := t.Elem.Size
		i := off / s
		return fmt.Sprintf("[%d]%s", i, typeFieldName(t.Elem, off-i*s))
	case gocore.KindStruct:
		for _, f := range t.Fields {
			if f.Off <= off && off < f.Off+f.Type.Size {
				return "." + f.Name + typeFieldName(f.Type, off-f.Off)
			}
		}
	}
	return ".???"
}
func typeFieldName(t *gocore.Type, off int64) string {
	switch t.Kind {
	case gocore.KindBool, gocore.KindInt, gocore.KindUint, gocore.KindFloat:
		return ""
	case gocore.KindComplex:
		if off == 0 {
			return ".real"
		}
		return ".imag"
	case gocore.KindIface, gocore.KindEface:
		if off == 0 {
			return ".type"
		}
		return ".data"
	case gocore.KindPtr, gocore.KindFunc:
		return ""
	case gocore.KindString:
		if off == 0 {
			return ".ptr"
		}
		return ".len"
	case gocore.KindSlice:
		if off == 0 {
			return ".ptr"
		}
		if off <= t.Size/2 {
			return ".len"
		}
		return ".cap"
	case gocore.KindArray:
		s := t.Elem.Size
		i := off / s
		return fmt.Sprintf("[%d]%s", i, typeFieldName(t.Elem, off-i*s))
	case gocore.KindStruct:
		for _, f := range t.Fields {
			if f.Off <= off && off < f.Off+f.Type.Size {
				return "." + f.Name + typeFieldName(f.Type, off-f.Off)
			}
		}
	}
	return ".???"
}
func typeFieldName ( t * gocore . Type , off int64 ) string { switch t . Kind { case gocore . KindBool , gocore . KindInt , gocore . KindUint , gocore . KindFloat : return " " case gocore . KindComplex : if off == 0 { return " " } return " " case gocore . KindIface , gocore . KindEface : if off == 0 { return " " } return " " case gocore . KindPtr , gocore . KindFunc : return " " case gocore . KindString : if off == 0 { return " " } return " " case gocore . KindSlice : if off == 0 { return " " } if off <= t . Size / 2 { return " " } return " " case gocore . KindArray : s := t . Elem . Size i := off / s return fmt . Sprintf ( " " , i , typeFieldName ( t . Elem , off - i * s ) ) case gocore . KindStruct : for _ , f := range t . Fields { if f . Off <= off && off < f . Off + f . Type . Size { return " " + f . Name + typeFieldName ( f . Type , off - f . Off ) } } } return " " }
// typeFieldName returns the name of the field at offset off in t.
typeFieldName returns the name of the field at offset off in t .