Fix invokeVarArgs
This commit is contained in:
parent
7d91c2b5cb
commit
05c858ee44
2 changed files with 6 additions and 5 deletions
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue