diff options
Diffstat (limited to 'Examples/test-suite/lua/exception_memory_leak_runme.lua')
-rw-r--r-- | Examples/test-suite/lua/exception_memory_leak_runme.lua | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/Examples/test-suite/lua/exception_memory_leak_runme.lua b/Examples/test-suite/lua/exception_memory_leak_runme.lua new file mode 100644 index 000000000..f3fc0f27b --- /dev/null +++ b/Examples/test-suite/lua/exception_memory_leak_runme.lua @@ -0,0 +1,29 @@ +require("import") -- the import fn +import("exception_memory_leak") -- import code +eml=exception_memory_leak --alias + +-- catch "undefined" global variables +local env = _ENV -- Lua 5.2 +if not env then env = getfenv () end -- Lua 5.1 +setmetatable(env, {__index=function (t,i) error("undefined global variable `"..i.."'",2) end}) + +a = eml.Foo() +assert(eml.Foo_get_count() == 1) +b = eml.Foo() +assert(eml.Foo_get_count() == 2) + +-- Normal behaviour +eml.trigger_internal_swig_exception("no problem", a) +assert(eml.Foo_get_count() == 2) +assert(eml.Foo_get_freearg_count() == 1) + +-- SWIG exception triggered and handled (return new object case) +ok,ex=pcall(eml.trigger_internal_swig_exception, "null", b) +assert(ok==false) +assert(eml.Foo_get_count() == 2) +assert(eml.Foo_get_freearg_count() == 2) + +-- SWIG exception triggered and handled (return by value case). +ok,ex=pcall(eml.trigger_internal_swig_exception, "null") +assert(ok==false) +assert(eml.Foo_get_count() == 2) |