diff --git a/cl/_testcpp/ctor_dtor/wrap.cpp b/cl/_testcpp/ctor_dtor/wrap.cpp index afa477e9..9ec43362 100644 --- a/cl/_testcpp/ctor_dtor/wrap.cpp +++ b/cl/_testcpp/ctor_dtor/wrap.cpp @@ -1,13 +1,13 @@ #include -void _llcppg__ZN3barC1Ev(bar* this) { +extern "C" void _llcppg__ZN3barC1Ev(bar* this) { this->bar(); } -void _llcppg__ZN3barC1EPKc(bar* this, const char * a) { +extern "C" void _llcppg__ZN3barC1EPKc(bar* this, const char * a) { this->bar(a); } -void _llcppg__ZN3barD1Ev(bar* this) { +extern "C" void _llcppg__ZN3barD1Ev(bar* this) { this->~bar(); } diff --git a/cl/_testcpp/inline/wrap.cpp b/cl/_testcpp/inline/wrap.cpp index da679932..12b9c08a 100644 --- a/cl/_testcpp/inline/wrap.cpp +++ b/cl/_testcpp/inline/wrap.cpp @@ -1,9 +1,9 @@ #include -unsigned int _llcppg__ZN3bar1fEi(bar* this, int a) { +extern "C" unsigned int _llcppg__ZN3bar1fEi(bar* this, int a) { return this->f(a); } -void _llcppg__ZN3bar2_gEv(bar* this) { +extern "C" void _llcppg__ZN3bar2_gEv(bar* this) { this->_g(); } diff --git a/cl/wrap.go b/cl/wrap.go index d8aa60cd..bf0ba982 100644 --- a/cl/wrap.go +++ b/cl/wrap.go @@ -60,7 +60,7 @@ func wrapInlineFunc(ctx *pkgCtx, manglingName string, fn clang.Cursor, cls *clas } w.WriteByte('\n') wrapName := "_llcppg_" + manglingName - writeFunc(w, wrapName, fn, cls) + writeFunc(w, wrapName, fn, cls, ctx.lang) return wrapName } @@ -68,15 +68,15 @@ func wrapInlineFunc(ctx *pkgCtx, manglingName string, fn clang.Cursor, cls *clas type writerT = bytes.Buffer -func writeFunc(b *writerT, name string, fn clang.Cursor, cls *classCtx) { +func writeFunc(b *writerT, name string, fn clang.Cursor, cls *classCtx, lang Language) { var call writerT - writeFuncProto(b, &call, name, fn, cls) + writeFuncProto(b, &call, name, fn, cls, lang) b.WriteString(" {\n") b.Write(call.Bytes()) b.WriteString("}\n") } -func writeFuncProto(out, call *writerT, name string, fn clang.Cursor, cls *classCtx) { +func writeFuncProto(out, call *writerT, name string, fn clang.Cursor, cls *classCtx, lang Language) { var b writerT b.WriteString(name) b.WriteByte('(') @@ -109,6 +109,9 @@ func writeFuncProto(out, call *writerT, name string, fn clang.Cursor, cls *class } b.WriteByte(')') call.WriteString(");\n") + if lang == LanguageCXX { + out.WriteString(`extern "C" `) + } writeParam(out, retType, b.String()) }