| /* go-cgo.c -- SWIG support routines for libgo. |
| |
| Copyright 2011 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. */ |
| |
| #include "go-alloc.h" |
| #include "interface.h" |
| #include "go-panic.h" |
| #include "go-string.h" |
| |
| /* These are routines used by SWIG. The gc runtime library provides |
| the same routines under the same name, though in that case the code |
| is required to import runtime/cgo. */ |
| |
| void * |
| _cgo_allocate (size_t n) |
| { |
| return __go_alloc (n); |
| } |
| |
| extern const struct __go_type_descriptor string_type_descriptor |
| asm ("__go_tdn_string"); |
| |
| void |
| _cgo_panic (const char *p) |
| { |
| int len; |
| unsigned char *data; |
| struct __go_string *ps; |
| struct __go_empty_interface e; |
| |
| len = __builtin_strlen (p); |
| data = __go_alloc (len); |
| __builtin_memcpy (data, p, len); |
| ps = __go_alloc (sizeof *ps); |
| ps->__data = data; |
| ps->__length = len; |
| e.__type_descriptor = &string_type_descriptor; |
| e.__object = ps; |
| __go_panic (e); |
| } |