runtime: allow comparing interfaces in reflectValueEqual()

Этот коммит содержится в:
Damian Gryski 2021-11-23 13:40:13 -08:00 коммит произвёл Ayke
родитель 18f4ffd656
коммит 18242bc26a
3 изменённых файлов: 17 добавлений и 0 удалений

Просмотреть файл

@ -74,6 +74,8 @@ func reflectValueEqual(x, y reflect.Value) bool {
}
}
return true
case reflect.Interface:
return reflectValueEqual(x.Elem(), y.Elem())
default:
runtimePanic("comparing un-comparable type")
return false // unreachable

12
testdata/binop.go предоставленный
Просмотреть файл

@ -86,6 +86,18 @@ func main() {
// check for signed integer overflow
println("-2147483648 / -1:", sdiv32(-2147483648, -1))
println("-2147483648 % -1:", srem32(-2147483648, -1))
type foo struct {
n int
itf interface{}
}
var a interface{} = foo{3, float32(5)}
var b interface{} = foo{3, float32(3)}
var b2 interface{} = foo{3, float32(3)}
println("interface equality")
println("a==b", a == b)
println("b==b2", b == b2)
}
var x = true

3
testdata/binop.txt предоставленный
Просмотреть файл

@ -71,3 +71,6 @@ constant number
0
-2147483648 / -1: -2147483648
-2147483648 % -1: 0
interface equality
a==b false
b==b2 true