Fix invokeVarArgs

This commit is contained in:
Ruslan Mustakov 2017-07-28 18:44:01 +07:00
commit 05c858ee44
2 changed files with 6 additions and 5 deletions

View file

@ -180,7 +180,7 @@ type
meth*: meth*:
proc (obj: ptr GodotObject; methodData: pointer; proc (obj: ptr GodotObject; methodData: pointer;
userData: pointer; numArgs: cint; userData: pointer; numArgs: cint;
args: var ptr array[MAX_ARG_COUNT, GodotVariant]): args: var array[MAX_ARG_COUNT, ptr GodotVariant]):
GodotVariant {.noconv.} GodotVariant {.noconv.}
methodData*: pointer methodData*: pointer
freeFunc*: proc (a2: pointer) {.noconv.} freeFunc*: proc (a2: pointer) {.noconv.}
@ -263,6 +263,7 @@ proc getClassName*(o: ptr GodotObject): string =
var ret: GodotString var ret: GodotString
getClassMethodBind.ptrCall(o, nil, addr ret) getClassMethodBind.ptrCall(o, nil, addr ret)
result = $ret result = $ret
deinit(ret)
if result.len > 2 and result[^2] == 'S' and result[^1] == 'W': if result.len > 2 and result[^2] == 'S' and result[^1] == 'W':
# There are physics type not known by ClassDB # There are physics type not known by ClassDB
result = result[0..result.len-3] result = result[0..result.len-3]

View file

@ -193,8 +193,8 @@ macro invokeVarArgs(procIdent, objIdent;
## error(...) ## error(...)
template conv(procLit, argT, argSeq, idx, argIdent, errIdent) = template conv(procLit, argT, argSeq, idx, argIdent, errIdent) =
let v = newVariant(argSeq[idx]) let v = newVariant(argSeq[idx][])
v.markNoDeinit() # args should be destroyed externally v.markNoDeinit() # args will be destroyed externally
let (argIdent, errIdent) = godotToNim[argT](v) let (argIdent, errIdent) = godotToNim[argT](v)
if errIdent != ConversionResult.OK: if errIdent != ConversionResult.OK:
let errorKind = if errIdent == ConversionResult.TypeError: "a type error" let errorKind = if errIdent == ConversionResult.TypeError: "a type error"
@ -202,7 +202,7 @@ macro invokeVarArgs(procIdent, objIdent;
printError( printError(
"Failed to invoke Nim procedure " & $procLit & "Failed to invoke Nim procedure " & $procLit &
": " & errorKind & " has occurred when converting argument " & $idx & ": " & errorKind & " has occurred when converting argument " & $idx &
" of Godot type " & $argSeq[idx].getType()) " of Godot type " & $argSeq[idx][].getType())
return return
# these help to avoid exporting internal modules # these help to avoid exporting internal modules
@ -439,7 +439,7 @@ proc genType(obj: ObjectDecl): NimNode {.compileTime.} =
argTypes, methFuncIdent, hasReturnValue) = argTypes, methFuncIdent, hasReturnValue) =
proc methFuncIdent(obj: ptr GodotObject, methodData: pointer, proc methFuncIdent(obj: ptr GodotObject, methodData: pointer,
userData: pointer, numArgs: cint, userData: pointer, numArgs: cint,
args: var ptr array[MAX_ARG_COUNT, GodotVariant]): args: var array[MAX_ARG_COUNT, ptr GodotVariant]):
GodotVariant {.noconv.} = GodotVariant {.noconv.} =
let self = cast[classNameIdent](userData) let self = cast[classNameIdent](userData)
when defined(release): when defined(release):