gcc/libgo/runtime/interface.h
Ian Lance Taylor 7a9389330e Add Go frontend, libgo library, and Go testsuite.
gcc/:
	* gcc.c (default_compilers): Add entry for ".go".
	* common.opt: Add -static-libgo as a driver option.
	* doc/install.texi (Configuration): Mention libgo as an option for
	--enable-shared.  Mention go as an option for --enable-languages.
	* doc/invoke.texi (Overall Options): Mention .go as a file name
	suffix.  Mention go as a -x option.
	* doc/frontends.texi (G++ and GCC): Mention Go as a supported
	language.
	* doc/sourcebuild.texi (Top Level): Mention libgo.
	* doc/standards.texi (Standards): Add section on Go language.
	Move references for other languages into their own section.
	* doc/contrib.texi (Contributors): Mention that I contributed the
	Go frontend.
gcc/testsuite/:
	* lib/go.exp: New file.
	* lib/go-dg.exp: New file.
	* lib/go-torture.exp: New file.
	* lib/target-supports.exp (check_compile): Match // Go.

From-SVN: r167407
2010-12-03 04:34:57 +00:00

58 lines
1.7 KiB
C

/* 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
#include "go-type.h"
/* 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) */