diff --git a/godot/internal/godotinternaltypes.nim b/godot/internal/godotinternaltypes.nim index a2910c9f..a4205e5d 100644 --- a/godot/internal/godotinternaltypes.nim +++ b/godot/internal/godotinternaltypes.nim @@ -92,14 +92,14 @@ type RID, Object, Dictionary, - Array, ## 20 + Array, # arrays - PoolByteArray, + PoolByteArray, ## 20 PoolIntArray, PoolRealArray, PoolStringArray, - PoolVector2Array, ## 25 - PoolVector3Array, + PoolVector2Array, + PoolVector3Array, ## 25 PoolColorArray VariantCallErrorType* {.size: sizeof(cint), pure.} = enum @@ -291,7 +291,7 @@ type methodData*: pointer freeFunc*: proc (a2: pointer) {.noconv.} - GodotSignalArgument* {.bycopy.} = object + GodotSignalArgument* {.bycopy, packed.} = object name*: GodotString typ*: cint hint*: GodotPropertyHint diff --git a/godot/nim/godotmacros.nim b/godot/nim/godotmacros.nim index d6efa6d2..27e59637 100644 --- a/godot/nim/godotmacros.nim +++ b/godot/nim/godotmacros.nim @@ -1,6 +1,6 @@ # Copyright 2018 Xored Software, Inc. -import macros, tables, typetraits, strutils, sets, sequtils, options, algorithm +import macros, strutils, sets, options import godotinternal, internal/godotvariants import godotnim, core/variants @@ -23,13 +23,23 @@ type nimNode: NimNode isNoGodot: bool + SignalArgDecl = ref object + name: string + typ: NimNode + + SignalDecl = ref object + name: string + args: seq[SignalArgDecl] + ObjectDecl = ref object name: string parentName: string fields: seq[VarDecl] + signals: seq[SignalDecl] methods: seq[MethodDecl] isTool: bool + ParseError = object of Exception include "internal/backwardcompat.inc.nim" @@ -178,11 +188,34 @@ proc parseVarSection(decl: NimNode): seq[VarDecl] = else: result.add(identDefsToVarDecls(decl[i])) +proc parseSignal(sig: NimNode): SignalDecl = + let errorMsg = "Signal declaration must have this format: signal my_signal(param1: int, param2: string)" + + if sig.kind != nnkCommand: + parseError(sig, errorMsg) + if not (sig[1].kind == nnkCall or sig[1].kind == nnkObjConstr): + parseError(sig, errorMsg) + + result = SignalDecl( + name: $sig[1][0], + args: newSeq[SignalArgDecl]() + ) + + if sig[1].kind == nnkObjConstr: + for i in 1..`_ or any other way ## that you can find in `Godot API `_. let typeDef = parseType(ast) - result = genType(typeDef) + result = genType(typeDef) \ No newline at end of file