12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /* interface.h -- the interface type for Go.
- Copyright 2009 The Go Authors. All rights reserved.
- Use of this source code is governed by a BSD-style
- license that can be found in the LICENSE file. */
- #ifndef LIBGO_INTERFACE_H
- #define LIBGO_INTERFACE_H
- struct __go_type_descriptor;
- /* A variable of interface type is an instance of this struct, if the
- interface has any methods. */
- struct __go_interface
- {
- /* A pointer to the interface method table. The first pointer is
- the type descriptor of the object. Subsequent pointers are
- pointers to functions. This is effectively the vtable for this
- interface. The function pointers are in the same order as the
- list in the internal representation of the interface, which sorts
- them by name. */
- const void **__methods;
- /* The object. If the object is a pointer--if the type descriptor
- code is GO_PTR or GO_UNSAFE_POINTER--then this field is the value
- of the object itself. Otherwise this is a pointer to memory
- which holds the value. */
- void *__object;
- };
- /* A variable of an empty interface type is an instance of this
- struct. */
- struct __go_empty_interface
- {
- /* The type descriptor of the object. */
- const struct __go_type_descriptor *__type_descriptor;
- /* The object. This is the same as __go_interface above. */
- void *__object;
- };
- extern void *
- __go_convert_interface (const struct __go_type_descriptor *,
- const struct __go_type_descriptor *);
- extern void *
- __go_convert_interface_2 (const struct __go_type_descriptor *,
- const struct __go_type_descriptor *,
- _Bool may_fail);
- extern _Bool
- __go_can_convert_to_interface(const struct __go_type_descriptor *,
- const struct __go_type_descriptor *);
- #endif /* !defined(LIBGO_INTERFACE_H) */
|