PageRenderTime 44ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Lib/go/goruntime.swg

#
Unknown | 138 lines | 105 code | 33 blank | 0 comment | 0 complexity | 4ef904a0af4f9f57340db6f73fe9f069 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /* ------------------------------------------------------------
  2. * goruntime.swg
  3. *
  4. * Go runtime code for the various generated files.
  5. * ------------------------------------------------------------ */
  6. %insert(runtime) %{
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. typedef struct { char *p; int n; } _gostring_;
  11. typedef struct { void* array; unsigned int len; unsigned int cap; } _goslice_;
  12. %}
  13. #ifndef SWIGGO_GCCGO
  14. /* Boilerplate for C/C++ code when using 6g/8g. This code is compiled
  15. with gcc. */
  16. %insert(runtime) %{
  17. #define swiggo_size_assert_eq(x, y, name) typedef char name[(x-y)*(x-y)*-2+1];
  18. #define swiggo_size_assert(t, n) swiggo_size_assert_eq(sizeof(t), n, swiggo_sizeof_##t##_is_not_##n)
  19. swiggo_size_assert(char, 1)
  20. swiggo_size_assert(short, 2)
  21. swiggo_size_assert(int, 4)
  22. typedef long long swiggo_long_long;
  23. swiggo_size_assert(swiggo_long_long, 8)
  24. swiggo_size_assert(float, 4)
  25. swiggo_size_assert(double, 8)
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. extern void crosscall2(void (*fn)(void *, int), void *, int);
  30. extern void _cgo_allocate(void *, int);
  31. extern void _cgo_panic(void *, int);
  32. #ifdef __cplusplus
  33. }
  34. #endif
  35. static void *_swig_goallocate(size_t len) {
  36. struct {
  37. size_t len;
  38. void *ret;
  39. } a;
  40. a.len = len;
  41. crosscall2(_cgo_allocate, &a, (int) sizeof a);
  42. return a.ret;
  43. }
  44. static void _swig_gopanic(const char *p) {
  45. struct {
  46. const char *p;
  47. } a;
  48. a.p = p;
  49. crosscall2(_cgo_panic, &a, (int) sizeof a);
  50. }
  51. %}
  52. /* Boilerplate for C code when using 6g/8g. This code is compiled
  53. with 6c/8c. */
  54. %insert(gc_header) %{
  55. #include "runtime.h"
  56. #include "cgocall.h"
  57. #ifdef _64BIT
  58. #define SWIG_PARM_SIZE 8
  59. #else
  60. #define SWIG_PARM_SIZE 4
  61. #endif
  62. %}
  63. #else
  64. /* Boilerplate for C/C++ code when using gccgo. */
  65. %insert(runtime) %{
  66. #define SWIGGO_GCCGO
  67. #ifdef __cplusplus
  68. extern "C" {
  69. #endif
  70. extern void *_cgo_allocate(size_t);
  71. extern void _cgo_panic(const char *);
  72. #ifdef __cplusplus
  73. }
  74. #endif
  75. #define _swig_goallocate _cgo_allocate
  76. #define _swig_gopanic _cgo_panic
  77. %}
  78. #endif
  79. %insert(runtime) %{
  80. static _gostring_ _swig_makegostring(const char *p, size_t l) {
  81. _gostring_ ret;
  82. ret.p = (char*)_swig_goallocate(l + 1);
  83. memcpy(ret.p, p, l);
  84. ret.n = l;
  85. return ret;
  86. }
  87. #define SWIG_contract_assert(expr, msg) \
  88. if (!(expr)) { _swig_gopanic(msg); } else
  89. %}
  90. #ifndef SWIGGO_GCCGO
  91. %insert(go_header) %{
  92. import _ "runtime/cgo"
  93. %}
  94. #else
  95. %insert(go_header) %{
  96. import "syscall"
  97. type _ syscall.Sockaddr
  98. %}
  99. #endif
  100. /* Function pointers are translated by the code in go.cxx into
  101. _swig_fnptr. Member pointers are translated to _swig_memberptr. */
  102. %insert(go_header) %{
  103. type _swig_fnptr *byte
  104. type _swig_memberptr *byte
  105. %}