aboutsummaryrefslogtreecommitdiff
path: root/Lib/go/goruntime.swg
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/go/goruntime.swg')
-rw-r--r--Lib/go/goruntime.swg211
1 files changed, 13 insertions, 198 deletions
diff --git a/Lib/go/goruntime.swg b/Lib/go/goruntime.swg
index 269a4eefd..7bf083bd3 100644
--- a/Lib/go/goruntime.swg
+++ b/Lib/go/goruntime.swg
@@ -23,46 +23,39 @@ static void* Swig_malloc(int c) {
%}
-#if SWIGGO_CGO
%insert(cgo_comment_typedefs) %{
+#include <stddef.h>
#include <stdint.h>
%}
-#endif
#if SWIGGO_INTGO_SIZE == 32
%insert(runtime) %{
typedef int intgo;
typedef unsigned int uintgo;
%}
-#if SWIGGO_CGO
%insert(cgo_comment_typedefs) %{
typedef int intgo;
typedef unsigned int uintgo;
%}
-#endif
#elif SWIGGO_INTGO_SIZE == 64
%insert(runtime) %{
typedef long long intgo;
typedef unsigned long long uintgo;
%}
-#if SWIGGO_CGO
%insert(cgo_comment_typedefs) %{
typedef long long intgo;
typedef unsigned long long uintgo;
%}
-#endif
#else
%insert(runtime) %{
typedef ptrdiff_t intgo;
typedef size_t uintgo;
%}
-#if SWIGGO_CGO
%insert(cgo_comment_typedefs) %{
typedef ptrdiff_t intgo;
typedef size_t uintgo;
%}
#endif
-#endif
#ifndef SWIGGO_GCCGO
// Set the host compiler struct attribute that will be
@@ -89,8 +82,6 @@ typedef struct { void* array; intgo len; intgo cap; } _goslice_;
%}
-#ifdef SWIGGO_CGO
-
%insert(cgo_comment_typedefs) %{
typedef struct { char *p; intgo n; } _gostring_;
@@ -98,91 +89,7 @@ typedef struct { void* array; intgo len; intgo cap; } _goslice_;
%}
-#endif
-
-#ifndef SWIGGO_GCCGO
-/* Boilerplate for C/C++ code when using 6g/8g. This code is compiled
- with gcc. */
-%insert(runtime) %{
-
-#define swiggo_size_assert_eq(x, y, name) typedef char name[(x-y)*(x-y)*-2+1];
-#define swiggo_size_assert(t, n) swiggo_size_assert_eq(sizeof(t), n, swiggo_sizeof_##t##_is_not_##n)
-
-swiggo_size_assert(char, 1)
-swiggo_size_assert(short, 2)
-swiggo_size_assert(int, 4)
-typedef long long swiggo_long_long;
-swiggo_size_assert(swiggo_long_long, 8)
-swiggo_size_assert(float, 4)
-swiggo_size_assert(double, 8)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern void crosscall2(void (*fn)(void *, int), void *, int);
-extern char* _cgo_topofstack(void) __attribute__ ((weak));
-extern void _cgo_allocate(void *, int);
-extern void _cgo_panic(void *, int);
-#ifdef __cplusplus
-}
-#endif
-
-static char *_swig_topofstack() {
- if (_cgo_topofstack) {
- return _cgo_topofstack();
- } else {
- return 0;
- }
-}
-
-static void _swig_gopanic(const char *p) {
- struct {
- const char *p;
- } SWIGSTRUCTPACKED a;
- a.p = p;
- crosscall2(_cgo_panic, &a, (int) sizeof a);
-}
-
-%}
-
-#if !SWIGGO_CGO
-
-/* This is here for backward compatibility, but it will not work
- with Go 1.5 or later. Do not use it in new code. */
-%insert(runtime) %{
-
-static void *_swig_goallocate(size_t len) {
- struct {
- size_t len;
- void *ret;
- } SWIGSTRUCTPACKED a;
- a.len = len;
- crosscall2(_cgo_allocate, &a, (int) sizeof a);
- return a.ret;
-}
-
-%}
-
-#endif
-
-#if !SWIGGO_CGO
-
-/* Boilerplate for C code when using 6g/8g. This code is compiled
- with 6c/8c. */
-%insert(gc_header) %{
-#include "runtime.h"
-#include "cgocall.h"
-
-#pragma dataflag 16
-static void *cgocall = runtime·cgocall;
-#pragma dataflag 16
-void *·_cgo_runtime_cgocall = &cgocall;
-
-%}
-
-#endif
-
-#else
+#ifdef SWIGGO_GCCGO
/* Boilerplate for C/C++ code when using gccgo. */
%insert(runtime) %{
@@ -201,115 +108,12 @@ extern void _cgo_panic(const char *);
#define _swig_gopanic _cgo_panic
%}
-#if !SWIGGO_CGO
-
-%insert(runtime) %{
-
-/* Implementations of SwigCgocall and friends for different versions
- of gccgo. The Go code will call these functions using C names with
- a prefix of the module name. The implementations here call the
- routine in libgo. The routines to call vary depending on the gccgo
- version. We assume that the version of gcc used to compile this
- file is the same as the version of gccgo. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define SWIG_GCC_VERSION \
- (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
-
-#if SWIG_GCC_VERSION < 40700
-#define SwigDoCgocall()
-#define SwigDoCgocallDone()
-#define SwigDoCgocallBack()
-#define SwigDoCgocallBackDone()
-#elif SWIG_GCC_VERSION == 40700
-void SwigDoCgocall(void) __asm__("libgo_syscall.syscall.Entersyscall");
-void SwigDoCgocallDone(void) __asm__("libgo_syscall.syscall.Exitsyscall");
-void SwigDoCgocallBack(void) __asm__("libgo_syscall.syscall.Exitsyscall");
-void SwigDoCgocallBackDone(void) __asm__("libgo_syscall.syscall.Entersyscall");
-#else
-void SwigDoCgocall(void) __asm__("syscall.Cgocall");
-void SwigDoCgocallDone(void) __asm__("syscall.CgocallDone");
-void SwigDoCgocallBack(void) __asm__("syscall.CgocallBack");
-void SwigDoCgocallBackDone(void) __asm__("syscall.CgocallBackDone");
-#endif
-
-#define SWIGSTRINGIFY2(s) #s
-#define SWIGSTRINGIFY(s) SWIGSTRINGIFY2(s)
-
-void SwigCgocall()
- __asm__(SWIGSTRINGIFY(SWIGGO_PREFIX) ".SwigCgocall");
-void SwigCgocall() {
- SwigDoCgocall();
-}
-
-void SwigCgocallDone()
- __asm__(SWIGSTRINGIFY(SWIGGO_PREFIX) ".SwigCgocallDone");
-void SwigCgocallDone() {
- SwigDoCgocallDone();
-}
-
-void SwigCgocallBack()
- __asm__(SWIGSTRINGIFY(SWIGGO_PREFIX) ".SwigCgocallBack");
-void SwigCgocallBack() {
- SwigDoCgocallBack();
-}
-
-void SwigCgocallBackDone()
- __asm__(SWIGSTRINGIFY(SWIGGO_PREFIX) ".SwigCgocallBackDone");
-void SwigCgocallBackDone() {
- SwigDoCgocallBackDone();
-}
-
-#undef SWIGSTRINGIFY
-#undef SWIGSTRINGIFY2
-
-#ifdef __cplusplus
-}
-#endif
-
-%}
-
-#endif
-
#endif
-#if !SWIGGO_CGO
-
-%insert(runtime) %{
-
-/* This is here for backward compatibility, but it will not work
- with Go 1.5 or later. Do not use it in new code. */
-static _gostring_ _swig_makegostring(const char *p, size_t l) {
- _gostring_ ret;
- ret.p = (char*)_swig_goallocate(l + 1);
- memcpy(ret.p, p, l);
- ret.n = l;
- return ret;
-}
-
-%}
-
-#endif
-
-%insert(runtime) %{
-
-#define SWIG_contract_assert(expr, msg) \
- if (!(expr)) { _swig_gopanic(msg); } else
-%}
-
#ifndef SWIGGO_GCCGO
%go_import("unsafe", _ "runtime/cgo")
-#if !SWIGGO_CGO
-%insert(go_header) %{
-var _cgo_runtime_cgocall func(unsafe.Pointer, uintptr)
-%}
-#endif
-
#else
%go_import("syscall", "unsafe")
@@ -346,6 +150,17 @@ type _swig_fnptr *byte
type _swig_memberptr *byte
%}
+/* Convert a Go interface value into a C++ pointer. */
+
+%insert(go_header) %{
+func getSwigcptr(v interface { Swigcptr() uintptr }) uintptr {
+ if v == nil {
+ return 0
+ }
+ return v.Swigcptr()
+}
+%}
+
/* For directors we need C++ to track a Go pointer. Since we can't
pass a Go pointer into C++, we use a map to track the pointers on
the Go side. */