From 914d41cff4fb30523c7e3d508844111c067f69c9 Mon Sep 17 00:00:00 2001 From: Stefan Salewski Date: Mon, 19 Jul 2021 11:22:36 +0200 Subject: [PATCH] nilArgFix --- gintro.nimble | 2 +- tests/gen.nim | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gintro.nimble b/gintro.nimble index 74295f0..fa040ff 100644 --- a/gintro.nimble +++ b/gintro.nimble @@ -1,6 +1,6 @@ # Package -version = "0.9.3" +version = "0.9.4" author = "Stefan Salewski" description = "High level GObject-Introspection based GTK4/GTK3 bindings" license = "MIT" diff --git a/tests/gen.nim b/tests/gen.nim index e7d1fe2..464f01d 100644 --- a/tests/gen.nim +++ b/tests/gen.nim @@ -1,6 +1,6 @@ # High level gobject-introspection based GTK4/GTK3 bindings for the Nim programming language # nimpretty --maxLineLen:130 gen.nim -# v 0.9.3 2021-JUN-29 +# v 0.9.4 2021-JUL-19 # (c) S. Salewski 2018, 2019, 2020, 2021 # usefull for finding death code: @@ -1652,6 +1652,8 @@ proc writeMethod(info: GIBaseInfo; minfo: GIFunctionInfo) = if out2ret:# and genProxy: h2 = "result" + if gArgInfoMayBeNull(arg): + nilArgFix.add(h2) if gArgInfoIsOptional(arg): methodBuffer.writeLine(" if addr($2) != nil:" % [ngrt.namePlain, h2]) if boxedFreeMeName != "": @@ -1710,6 +1712,7 @@ proc writeMethod(info: GIBaseInfo; minfo: GIFunctionInfo) = # echo sym # return + var nilArgFix: seq[string] var pars: GPars let p = methodBuffer.getPosition let symIsDeprecated = gBaseInfoIsDeprecated(mInfo).int != 0 @@ -2143,7 +2146,7 @@ proc writeMethod(info: GIBaseInfo; minfo: GIFunctionInfo) = else: methodBuffer.writeLine(" " & doCt3nt(ngrRet.name, ngrRet) & '(' & "resul0" & ')') else: - if pars.tempResFree != "": # ugly, do we have a better test for this case + if nilArgFix.len > 0 or pars.tempResFree != "": # ugly, do we have a better test for this case #if ngrRet.name != "void": methodBuffer.writeLine(" result = " & doCt3nt(ngrRet.name, ngrRet) & '(' & sym & pars.arglist & ')') else: @@ -2184,6 +2187,11 @@ proc writeMethod(info: GIBaseInfo; minfo: GIFunctionInfo) = methodBuffer.write("\nproc " & asym & EM & pars.plist) methodBuffer.writeLine(" {.\n importc: \"", sym, "\", ", libprag, ".}") + for n in nilArgFix: # https://github.com/StefanSalewski/gintro/issues/158 + methodBuffer.writeLine(" if $1 != nil and $1.impl == nil:" % n) + methodBuffer.writeLine(" $1.ignoreFinalizer = true" % n) + methodBuffer.writeLine(" $1 = nil" % n) + if pars.tmpoutgobjectarg.len != 0: methodBuffer.writeLine("# dothemagic(" & pars.outgobjectargname) dothegobjectargmagic() @@ -4269,7 +4277,7 @@ launch() # if not xcallerAlloc.contains(el): # echo el -# 4263 lines defaultParameters +# 4280 lines # gtk_icon_view_get_tooltip_context bug Candidate # gtk_tree_view_get_cursor bug #