fix: Add stubs for more missing reflect methods

With these methods stubbed out, the text/template package can be
imported. These changes also allow code generated by protoc to compile.
This commit is contained in:
Kyle Conroy
2022-01-23 15:04:26 -08:00
committed by Nia
parent d75e14245b
commit cfed3f0213
2 changed files with 117 additions and 27 deletions
+38 -18
View File
@@ -128,7 +128,7 @@ func (v Value) IsNil() bool {
_, val := decomposeInterface(*(*interface{})(v.value))
return val == nil
default:
panic(&ValueError{"IsNil"})
panic(&ValueError{Method: "IsNil"})
}
}
@@ -144,7 +144,7 @@ func (v Value) Pointer() uintptr {
case Func:
panic("unimplemented: (reflect.Value).Pointer()")
default: // not implemented: Func
panic(&ValueError{"Pointer"})
panic(&ValueError{Method: "Pointer"})
}
}
@@ -187,7 +187,7 @@ func (v Value) Bool() bool {
return uintptr(v.value) != 0
}
default:
panic(&ValueError{"Bool"})
panic(&ValueError{Method: "Bool"})
}
}
@@ -224,7 +224,7 @@ func (v Value) Int() int64 {
return int64(int64(uintptr(v.value)))
}
default:
panic(&ValueError{"Int"})
panic(&ValueError{Method: "Int"})
}
}
@@ -267,7 +267,7 @@ func (v Value) Uint() uint64 {
return uint64(uintptr(v.value))
}
default:
panic(&ValueError{"Uint"})
panic(&ValueError{Method: "Uint"})
}
}
@@ -293,7 +293,7 @@ func (v Value) Float() float64 {
return *(*float64)(unsafe.Pointer(&v.value))
}
default:
panic(&ValueError{"Float"})
panic(&ValueError{Method: "Float"})
}
}
@@ -315,7 +315,7 @@ func (v Value) Complex() complex128 {
// architectures with 128-bit pointers, however.
return *(*complex128)(v.value)
default:
panic(&ValueError{"Complex"})
panic(&ValueError{Method: "Complex"})
}
}
@@ -339,6 +339,10 @@ func (v Value) Slice(i, j int) Value {
panic("unimplemented: (reflect.Value).Slice()")
}
func (v Value) Slice3(i, j, k int) Value {
panic("unimplemented: (reflect.Value).Slice3()")
}
//go:linkname maplen runtime.hashmapLenUnsafePointer
func maplen(p unsafe.Pointer) int
@@ -360,7 +364,7 @@ func (v Value) Len() int {
case String:
return int((*stringHeader)(v.value).len)
default:
panic(&ValueError{"Len"})
panic(&ValueError{Method: "Len"})
}
}
@@ -378,7 +382,7 @@ func (v Value) Cap() int {
case Slice:
return int((*sliceHeader)(v.value).cap)
default:
panic(&ValueError{"Cap"})
panic(&ValueError{Method: "Cap"})
}
}
@@ -408,7 +412,7 @@ func (v Value) Elem() Value {
flags: v.flags &^ valueFlagIndirect,
}
default:
panic(&ValueError{"Elem"})
panic(&ValueError{Method: "Elem"})
}
}
@@ -552,7 +556,7 @@ func (v Value) Index(i int) Value {
value: unsafe.Pointer(value),
}
default:
panic(&ValueError{"Index"})
panic(&ValueError{Method: "Index"})
}
}
@@ -631,7 +635,7 @@ func (v Value) SetBool(x bool) {
case Bool:
*(*bool)(v.value) = x
default:
panic(&ValueError{"SetBool"})
panic(&ValueError{Method: "SetBool"})
}
}
@@ -649,7 +653,7 @@ func (v Value) SetInt(x int64) {
case Int64:
*(*int64)(v.value) = x
default:
panic(&ValueError{"SetInt"})
panic(&ValueError{Method: "SetInt"})
}
}
@@ -669,7 +673,7 @@ func (v Value) SetUint(x uint64) {
case Uintptr:
*(*uintptr)(v.value) = uintptr(x)
default:
panic(&ValueError{"SetUint"})
panic(&ValueError{Method: "SetUint"})
}
}
@@ -681,7 +685,7 @@ func (v Value) SetFloat(x float64) {
case Float64:
*(*float64)(v.value) = x
default:
panic(&ValueError{"SetFloat"})
panic(&ValueError{Method: "SetFloat"})
}
}
@@ -693,7 +697,7 @@ func (v Value) SetComplex(x complex128) {
case Complex128:
*(*complex128)(v.value) = x
default:
panic(&ValueError{"SetComplex"})
panic(&ValueError{Method: "SetComplex"})
}
}
@@ -703,7 +707,7 @@ func (v Value) SetString(x string) {
case String:
*(*string)(v.value) = x
default:
panic(&ValueError{"SetString"})
panic(&ValueError{Method: "SetString"})
}
}
@@ -788,10 +792,14 @@ type stringHeader struct {
type ValueError struct {
Method string
Kind Kind
}
func (e *ValueError) Error() string {
return "reflect: call of reflect.Value." + e.Method + " on invalid type"
if e.Kind == 0 {
return "reflect: call of " + e.Method + " on zero Value"
}
return "reflect: call of " + e.Method + " on " + e.Kind.String() + " Value"
}
// Calls to this function are converted to LLVM intrinsic calls such as
@@ -865,3 +873,15 @@ func MakeMap(typ Type) Value {
func (v Value) Call(in []Value) []Value {
panic("unimplemented: (reflect.Value).Call()")
}
func (v Value) MethodByName(name string) Value {
panic("unimplemented: (reflect.Value).MethodByName()")
}
func (v Value) Recv() (x Value, ok bool) {
panic("unimplemented: (reflect.Value).Recv()")
}
func NewAt(typ Type, p unsafe.Pointer) Value {
panic("unimplemented: reflect.New()")
}