mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-13 15:33:40 +00:00
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:
+38
-18
@@ -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()")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user