Added ability for macros, converters, and templates to be added in a class.
This commit is contained in:
parent
edc058c253
commit
324834dc23
1 changed files with 12 additions and 1 deletions
|
|
@ -174,10 +174,12 @@ macro class*(head: untyped, body: untyped): untyped =
|
||||||
|
|
||||||
setNodeName(n2, procName, typeName)
|
setNodeName(n2, procName, typeName)
|
||||||
# add the base pragma when it's a base method
|
# add the base pragma when it's a base method
|
||||||
n2[4] = newNimNode(nnkPragma).add(ident"base")
|
if node.kind == nnkMethodDef:
|
||||||
|
n2[4] = newNimNode(nnkPragma).add(ident"base")
|
||||||
else:
|
else:
|
||||||
discard
|
discard
|
||||||
|
|
||||||
|
var numRes = result.len()
|
||||||
# Iterate over the statements, adding `self: T`
|
# Iterate over the statements, adding `self: T`
|
||||||
# to the parameters of functions
|
# to the parameters of functions
|
||||||
for node in body.children:
|
for node in body.children:
|
||||||
|
|
@ -217,6 +219,14 @@ macro class*(head: untyped, body: untyped): untyped =
|
||||||
|
|
||||||
result.add(n)
|
result.add(n)
|
||||||
|
|
||||||
|
of nnkIteratorDef, nnkConverterDef, nnkMacroDef, nnkTemplateDef:
|
||||||
|
# inject `self: T` into the arguments
|
||||||
|
let n = copyNimTree(node)
|
||||||
|
echo n.treeRepr
|
||||||
|
n[3].insert(1, newIdentDefs(ident(objReference), typeName))
|
||||||
|
result.insert(numRes, n)
|
||||||
|
numRes += 1
|
||||||
|
|
||||||
of nnkVarSection:
|
of nnkVarSection:
|
||||||
# variables get turned into fields of the type.
|
# variables get turned into fields of the type.
|
||||||
for n in node.children:
|
for n in node.children:
|
||||||
|
|
@ -281,6 +291,7 @@ macro class*(head: untyped, body: untyped): untyped =
|
||||||
# Empty <= We want to replace self
|
# Empty <= We want to replace self
|
||||||
typeDecl[0][0][2][0][2] = recList
|
typeDecl[0][0][2][0][2] = recList
|
||||||
result.insert(0, typeDecl)
|
result.insert(0, typeDecl)
|
||||||
|
echo result.toStrLit()
|
||||||
|
|
||||||
when isMainModule:
|
when isMainModule:
|
||||||
class Animal of RootObj:
|
class Animal of RootObj:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue