runtime: allow comparing interfaces in reflectValueEqual()
Этот коммит содержится в:
родитель
18f4ffd656
коммит
18242bc26a
3 изменённых файлов: 17 добавлений и 0 удалений
|
@ -74,6 +74,8 @@ func reflectValueEqual(x, y reflect.Value) bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
case reflect.Interface:
|
||||||
|
return reflectValueEqual(x.Elem(), y.Elem())
|
||||||
default:
|
default:
|
||||||
runtimePanic("comparing un-comparable type")
|
runtimePanic("comparing un-comparable type")
|
||||||
return false // unreachable
|
return false // unreachable
|
||||||
|
|
12
testdata/binop.go
предоставленный
12
testdata/binop.go
предоставленный
|
@ -86,6 +86,18 @@ func main() {
|
||||||
// check for signed integer overflow
|
// check for signed integer overflow
|
||||||
println("-2147483648 / -1:", sdiv32(-2147483648, -1))
|
println("-2147483648 / -1:", sdiv32(-2147483648, -1))
|
||||||
println("-2147483648 % -1:", srem32(-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
|
var x = true
|
||||||
|
|
3
testdata/binop.txt
предоставленный
3
testdata/binop.txt
предоставленный
|
@ -71,3 +71,6 @@ constant number
|
||||||
0
|
0
|
||||||
-2147483648 / -1: -2147483648
|
-2147483648 / -1: -2147483648
|
||||||
-2147483648 % -1: 0
|
-2147483648 % -1: 0
|
||||||
|
interface equality
|
||||||
|
a==b false
|
||||||
|
b==b2 true
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче