mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: delete Type and implementations (use reflect instead)
unsafe: delete Typeof, Reflect, Unreflect, New, NewArray Part of issue 2955 and issue 2968. R=golang-dev, r CC=golang-dev https://golang.org/cl/5650069
This commit is contained in:
parent
cbe7d8db24
commit
6a75ece01c
13 changed files with 170 additions and 510 deletions
|
|
@ -207,7 +207,7 @@ func storeIword(p unsafe.Pointer, w iword, n uintptr) {
|
|||
|
||||
// emptyInterface is the header for an interface{} value.
|
||||
type emptyInterface struct {
|
||||
typ *runtime.Type
|
||||
typ *runtimeType
|
||||
word iword
|
||||
}
|
||||
|
||||
|
|
@ -215,8 +215,8 @@ type emptyInterface struct {
|
|||
type nonEmptyInterface struct {
|
||||
// see ../runtime/iface.c:/Itab
|
||||
itab *struct {
|
||||
ityp *runtime.Type // static interface type
|
||||
typ *runtime.Type // dynamic concrete type
|
||||
ityp *runtimeType // static interface type
|
||||
typ *runtimeType // dynamic concrete type
|
||||
link unsafe.Pointer
|
||||
bad int32
|
||||
unused int32
|
||||
|
|
@ -1606,6 +1606,10 @@ func Copy(dst, src Value) int {
|
|||
* constructors
|
||||
*/
|
||||
|
||||
// implemented in package runtime
|
||||
func unsafe_New(Type) unsafe.Pointer
|
||||
func unsafe_NewArray(Type, int) unsafe.Pointer
|
||||
|
||||
// MakeSlice creates a new zero-initialized slice value
|
||||
// for the specified slice type, length, and capacity.
|
||||
func MakeSlice(typ Type, len, cap int) Value {
|
||||
|
|
@ -1618,7 +1622,7 @@ func MakeSlice(typ Type, len, cap int) Value {
|
|||
|
||||
// Reinterpret as *SliceHeader to edit.
|
||||
s := (*SliceHeader)(unsafe.Pointer(&x))
|
||||
s.Data = uintptr(unsafe.NewArray(typ.Elem(), cap))
|
||||
s.Data = uintptr(unsafe_NewArray(typ.Elem(), cap))
|
||||
s.Len = len
|
||||
s.Cap = cap
|
||||
|
||||
|
|
@ -1697,7 +1701,7 @@ func Zero(typ Type) Value {
|
|||
if t.size <= ptrSize {
|
||||
return Value{t, nil, fl}
|
||||
}
|
||||
return Value{t, unsafe.New(typ), fl | flagIndir}
|
||||
return Value{t, unsafe_New(typ), fl | flagIndir}
|
||||
}
|
||||
|
||||
// New returns a Value representing a pointer to a new zero value
|
||||
|
|
@ -1706,11 +1710,18 @@ func New(typ Type) Value {
|
|||
if typ == nil {
|
||||
panic("reflect: New(nil)")
|
||||
}
|
||||
ptr := unsafe.New(typ)
|
||||
ptr := unsafe_New(typ)
|
||||
fl := flag(Ptr) << flagKindShift
|
||||
return Value{typ.common().ptrTo(), ptr, fl}
|
||||
}
|
||||
|
||||
// NewAt returns a Value representing a pointer to a value of the
|
||||
// specified type, using p as that pointer.
|
||||
func NewAt(typ Type, p unsafe.Pointer) Value {
|
||||
fl := flag(Ptr) << flagKindShift
|
||||
return Value{typ.common().ptrTo(), p, fl}
|
||||
}
|
||||
|
||||
// assignTo returns a value v that can be assigned directly to typ.
|
||||
// It panics if v is not assignable to typ.
|
||||
// For a conversion to an interface type, target is a suggested scratch space to use.
|
||||
|
|
@ -1749,20 +1760,20 @@ func (v Value) assignTo(context string, dst *commonType, target *interface{}) Va
|
|||
func chancap(ch iword) int32
|
||||
func chanclose(ch iword)
|
||||
func chanlen(ch iword) int32
|
||||
func chanrecv(t *runtime.Type, ch iword, nb bool) (val iword, selected, received bool)
|
||||
func chansend(t *runtime.Type, ch iword, val iword, nb bool) bool
|
||||
func chanrecv(t *runtimeType, ch iword, nb bool) (val iword, selected, received bool)
|
||||
func chansend(t *runtimeType, ch iword, val iword, nb bool) bool
|
||||
|
||||
func makechan(typ *runtime.Type, size uint32) (ch iword)
|
||||
func makemap(t *runtime.Type) (m iword)
|
||||
func mapaccess(t *runtime.Type, m iword, key iword) (val iword, ok bool)
|
||||
func mapassign(t *runtime.Type, m iword, key, val iword, ok bool)
|
||||
func mapiterinit(t *runtime.Type, m iword) *byte
|
||||
func makechan(typ *runtimeType, size uint32) (ch iword)
|
||||
func makemap(t *runtimeType) (m iword)
|
||||
func mapaccess(t *runtimeType, m iword, key iword) (val iword, ok bool)
|
||||
func mapassign(t *runtimeType, m iword, key, val iword, ok bool)
|
||||
func mapiterinit(t *runtimeType, m iword) *byte
|
||||
func mapiterkey(it *byte) (key iword, ok bool)
|
||||
func mapiternext(it *byte)
|
||||
func maplen(m iword) int32
|
||||
|
||||
func call(fn, arg unsafe.Pointer, n uint32)
|
||||
func ifaceE2I(t *runtime.Type, src interface{}, dst unsafe.Pointer)
|
||||
func ifaceE2I(t *runtimeType, src interface{}, dst unsafe.Pointer)
|
||||
|
||||
// Dummy annotation marking that the value x escapes,
|
||||
// for use in cases where the reflect code is so clever that
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue