diff --git a/gintro/gimplgobj.nim b/gintro/gimplgobj.nim index 98e856f..54eeb29 100644 --- a/gintro/gimplgobj.nim +++ b/gintro/gimplgobj.nim @@ -420,11 +420,17 @@ macro foreach*(container: gtk.Container; p: untyped; arg: typed): untyped = let procNameCdecl = "foreach_cdecl_" & $foreachID var r1s = """ proc $1(c: ptr gtk.Widget00; p: pointer) {.cdecl.} = - let a = cast[$3](p) # OK for refs and maybe basic types like int, but wrong for string + when $3 is ref: + let a = cast[$3](p) + else: + let a = cast[ref $3](p) let h: pointer = g_object_get_qdata(c, Quark) assert(h != nil) let cn: gtk.Container = cast[gtk.Container](h) - $2(cn, a) + when $3 is ref: + $2(cn, a) + else: + $2(cn, a[]) """ % [$procNameCdecl, $p, ats] let r2s =""" @@ -433,15 +439,15 @@ proc $1(container: gtk.Container; a: $2) = GC_ref(a) gtk_container_foreach(cast[ptr gtk.Container00](container.impl), $3, cast[pointer](a)) else: - var ar: ref $2 # this branch has issues, as the Nim proc p expects a value type + var ar: ref $2 new(ar) ar[] = a GC_ref(ar) gtk_container_foreach(cast[ptr gtk.Container00](container.impl), $3, cast[pointer](ar)) $1($5, $4) """ % [$procName, ats, $procNameCdecl, $arg, $container] - echo r1s - echo r2s + #echo r1s + #echo r2s result = parseStmt(r1s & r2s) -# 447 lines +# 453 lines