1 /* go-typedesc-equal.c -- return whether two type descriptors are equal.
3 Copyright 2009 The Go Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style
5 license that can be found in the LICENSE file. */
11 /* Compare type descriptors for equality. This is necessary because
12 types may have different descriptors in different shared libraries.
13 Also, unnamed types may have multiple type descriptors even in a
14 single shared library. */
17 __go_type_descriptors_equal (const struct __go_type_descriptor
*td1
,
18 const struct __go_type_descriptor
*td2
)
22 /* In a type switch we can get a NULL descriptor. */
23 if (td1
== NULL
|| td2
== NULL
)
25 if (td1
->__code
!= td2
->__code
|| td1
->__hash
!= td2
->__hash
)
27 if (td1
->__uncommon
!= NULL
&& td1
->__uncommon
->__name
!= NULL
)
29 if (td2
->__uncommon
== NULL
|| td2
->__uncommon
->__name
== NULL
)
31 return (__go_ptr_strings_equal (td1
->__uncommon
->__name
,
32 td2
->__uncommon
->__name
)
33 && __go_ptr_strings_equal (td1
->__uncommon
->__pkg_path
,
34 td2
->__uncommon
->__pkg_path
));
36 if (td2
->__uncommon
!= NULL
&& td2
->__uncommon
->__name
!= NULL
)
38 return __go_ptr_strings_equal (td1
->__reflection
, td2
->__reflection
);