swig/Examples/test-suite/exception_memory_leak.i
Olly Betts 1707d6b89b [PHP] Fix cleanup code handling issues
Fix to call cleanup code in exception situations and not to invoke
the freearg typemap twice in certain situations.

Fixes https://sourceforge.net/p/swig/bugs/1211/
2022-02-17 13:52:44 +13:00

45 lines
928 B
OpenEdge ABL

%module exception_memory_leak
%include <std_string.i>
%typemap(in) Foo* foo
{
$1 = new Foo;
}
%typemap(freearg) Foo* foo
{
Foo::inc_freearg_count();
delete $1;
}
%typemap(out) Foo* verify_no_memory_leak
{
if ($1 == NULL)
SWIG_exception_fail(SWIG_RuntimeError, "Let's see how the bindings manage this exception!");
$1 = NULL;
}
%inline %{
#include <string>
class Foo {
static unsigned count;
static unsigned freearg_count;
public:
Foo() { ++count; }
~Foo() { --count; }
static unsigned get_count() { return count; }
static unsigned get_freearg_count() { return freearg_count; }
#ifndef SWIG
static void inc_freearg_count() { ++freearg_count; }
#endif
};
unsigned Foo::count = 0;
unsigned Foo::freearg_count = 0;
static Foo* trigger_internal_swig_exception(const std::string& message, Foo* foo)
{
return (message == "null") ? NULL : foo;
}
%}