Skip to content

Commit 2d0cb0f

Browse files
author
YesDrX
committed
change macro to add procs to mimic legacy deprecated constants for enums
1 parent 0089e51 commit 2d0cb0f

File tree

1 file changed

+76
-35
lines changed

1 file changed

+76
-35
lines changed

webui/bindings_prefix.nim

Lines changed: 76 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,8 @@ proc getLegacyConstantName(oldName: string): string =
162162
renamed = oldName
163163
result = renamed.snakeToCamel()
164164

165+
template helper(body:untyped):untyped = body
166+
165167
macro renameEnumFields(enumdef : untyped): untyped =
166168
if enumdef.kind != nnkTypeDef:
167169
raise newException(Exception, "generateDeprecatedEnumConst macro can only be used on enum type definitions")
@@ -170,7 +172,7 @@ macro renameEnumFields(enumdef : untyped): untyped =
170172
let enumTypeShortName = enumTypeName.toSeq.map(x => (if (x in {'A'..'Z'}): $x else: "")).join("").toLowerAscii()
171173

172174
# generate enum defs
173-
result = nnkTypeDef.newTree(
175+
var renamedEnumDef = nnkTypeDef.newTree(
174176
nnkPostfix.newTree(
175177
newIdentNode("*"),
176178
newIdentNode(enumTypeName)
@@ -184,54 +186,93 @@ macro renameEnumFields(enumdef : untyped): untyped =
184186
if enumFieldNode.kind == nnkEmpty:
185187
continue
186188
elif enumFieldNode.kind == nnkEnumFieldDef:
187-
result[2].add(
189+
renamedEnumDef[2].add(
188190
nnkEnumFieldDef.newTree(
189191
newIdentNode(enumFieldNode[0].strVal.renameEnumFieldName(enumTypeShortName)),
190192
enumFieldNode[1]
191193
)
192194
)
193195
elif enumFieldNode.kind == nnkIdent:
194-
result[2].add(
196+
renamedEnumDef[2].add(
195197
newIdentNode(enumFieldNode.strVal.renameEnumFieldName(enumTypeShortName))
196198
)
197199
else:
198200
raise newException(Exception, "generateDeprecatedEnumConst macro can only be used on enum type definitions")
199201

202+
echo "\n\n" & "=".repeat(50)
200203
echo "[WebUI] Renaming Enum Definition:"
204+
echo "# Original Enum Def:"
201205
echo "=".repeat(50)
202206
echo enumdef.repr
203207
echo "=".repeat(50)
204-
echo result.repr
205-
echo "_".repeat(50)
206-
207-
208-
# # generate legacy constants
209-
# var constStmt = nnkStmtList.newTree(
210-
# nnkConstSection.newTree(
211-
# )
212-
# )
213-
# for enumFieldNode in enumdef[2]:
214-
# var constName, enumFieldName: string
215-
# if enumFieldNode.kind == nnkEmpty:
216-
# continue
217-
# elif enumFieldNode.kind == nnkEnumFieldDef:
218-
# constName = enumFieldNode[0].strVal.getLegacyConstantName()
219-
# enumFieldName = enumFieldNode[0].strVal.renameEnumFieldName(enumTypeShortName)
220-
# elif enumFieldNode.kind == nnkIdent:
221-
# constName = enumFieldNode.strVal.getLegacyConstantName()
222-
# enumFieldName = enumFieldNode.strVal.renameEnumFieldName(enumTypeShortName)
208+
echo "# Renamed Enum Def:"
209+
echo renamedEnumDef.repr
210+
echo "=".repeat(50)
211+
echo "# Generated procs to mimic legacy constants:"
212+
213+
renamedEnumDef[0][1] = (enumTypeName & "Helper").newIdentNode()
214+
215+
var statements = nnkStmtList.newTree(
216+
nnkTypeSection.newTree(
217+
renamedEnumDef
218+
)
219+
)
220+
221+
# add procs to mimic legacy constants
222+
for enumFieldNode in enumdef[2]:
223+
var constName, enumFieldName: string
224+
if enumFieldNode.kind == nnkEmpty:
225+
continue
226+
elif enumFieldNode.kind == nnkEnumFieldDef:
227+
constName = enumFieldNode[0].strVal.getLegacyConstantName()
228+
enumFieldName = enumFieldNode[0].strVal.renameEnumFieldName(enumTypeShortName)
229+
elif enumFieldNode.kind == nnkIdent:
230+
constName = enumFieldNode.strVal.getLegacyConstantName()
231+
enumFieldName = enumFieldNode.strVal.renameEnumFieldName(enumTypeShortName)
232+
233+
statements.add(
234+
nnkProcDef.newTree(
235+
nnkPostfix.newTree(
236+
newIdentNode("*"),
237+
newIdentNode(constName)
238+
),
239+
newEmptyNode(),
240+
newEmptyNode(),
241+
nnkFormalParams.newTree(
242+
newIdentNode(enumTypeName & "Helper")
243+
),
244+
nnkPragma.newTree(
245+
newIdentNode("inline"),
246+
newIdentNode("deprecated")
247+
),
248+
newEmptyNode(),
249+
nnkStmtList.newTree(
250+
nnkDotExpr.newTree(
251+
newIdentNode(enumTypeName & "Helper"),
252+
newIdentNode(enumFieldName)
253+
)
254+
)
255+
)
256+
)
223257

224-
# constStmt[0].add(
225-
# nnkConstDef.newTree(
226-
# nnkPostfix.newTree(
227-
# newIdentNode("*"),
228-
# newIdentNode(constName)
229-
# ),
230-
# newEmptyNode(),
231-
# nnkDotExpr.newTree(
232-
# newIdentNode(enumTypeName),
233-
# newIdentNode(enumFieldName)
234-
# )
235-
# )
236-
# )
258+
echo statements[^1].repr
259+
260+
echo "*".repeat(50)
261+
262+
statements.add(
263+
(enumTypeName & "Helper").newIdentNode()
264+
)
265+
266+
result = nnkTypeDef.newTree(
267+
nnkPostfix.newTree(
268+
newIdentNode("*"),
269+
newIdentNode(enumTypeName)
270+
),
271+
newEmptyNode(),
272+
nnkCall.newTree(
273+
newIdentNode("helper"),
274+
statements
275+
)
276+
)
237277

278+
# echo result

0 commit comments

Comments
 (0)