diff --git a/godot/godotinternal.nim b/godot/godotinternal.nim index f19e7e4..8b9bb6b 100644 --- a/godot/godotinternal.nim +++ b/godot/godotinternal.nim @@ -180,7 +180,7 @@ type meth*: proc (obj: ptr GodotObject; methodData: pointer; userData: pointer; numArgs: cint; - args: var ptr array[MAX_ARG_COUNT, GodotVariant]): + args: var array[MAX_ARG_COUNT, ptr GodotVariant]): GodotVariant {.noconv.} methodData*: pointer freeFunc*: proc (a2: pointer) {.noconv.} @@ -263,6 +263,7 @@ proc getClassName*(o: ptr GodotObject): string = var ret: GodotString getClassMethodBind.ptrCall(o, nil, addr ret) result = $ret + deinit(ret) if result.len > 2 and result[^2] == 'S' and result[^1] == 'W': # There are physics type not known by ClassDB result = result[0..result.len-3] diff --git a/godot/nim/godotmacros.nim b/godot/nim/godotmacros.nim index 10bfb62..fd151df 100644 --- a/godot/nim/godotmacros.nim +++ b/godot/nim/godotmacros.nim @@ -193,8 +193,8 @@ macro invokeVarArgs(procIdent, objIdent; ## error(...) template conv(procLit, argT, argSeq, idx, argIdent, errIdent) = - let v = newVariant(argSeq[idx]) - v.markNoDeinit() # args should be destroyed externally + let v = newVariant(argSeq[idx][]) + v.markNoDeinit() # args will be destroyed externally let (argIdent, errIdent) = godotToNim[argT](v) if errIdent != ConversionResult.OK: let errorKind = if errIdent == ConversionResult.TypeError: "a type error" @@ -202,7 +202,7 @@ macro invokeVarArgs(procIdent, objIdent; printError( "Failed to invoke Nim procedure " & $procLit & ": " & errorKind & " has occurred when converting argument " & $idx & - " of Godot type " & $argSeq[idx].getType()) + " of Godot type " & $argSeq[idx][].getType()) return # these help to avoid exporting internal modules @@ -439,7 +439,7 @@ proc genType(obj: ObjectDecl): NimNode {.compileTime.} = argTypes, methFuncIdent, hasReturnValue) = proc methFuncIdent(obj: ptr GodotObject, methodData: pointer, userData: pointer, numArgs: cint, - args: var ptr array[MAX_ARG_COUNT, GodotVariant]): + args: var array[MAX_ARG_COUNT, ptr GodotVariant]): GodotVariant {.noconv.} = let self = cast[classNameIdent](userData) when defined(release):