Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- StmtList
- StmtList
- TypeSection
- TypeDef
- Postfix
- Ident "*"
- Ident "test"
- Empty
- RefTy
- ObjectTy
- Empty
- Empty
- RecList
- IdentDefs
- Postfix
- Ident "*"
- Ident "wobble"
- Ident "int"
- Empty
- IdentDefs
- Postfix
- Ident "*"
- Ident "wibble"
- Ident "string"
- Empty
- ProcDef
- Ident "`$`"
- Empty
- Empty
- FormalParams
- Ident "string"
- ExprColonExpr
- Ident "v"
- Ident "test"
- Empty
- Empty
- StrLit "wibble"
- -------------------------------------------------------
- macro generateCastleDbModel*(fileName: static[string]) : untyped =
- var nodes : seq[NimNode] = @[]
- nodes.add(generateType("test", {"wibble": "string", "wobble": "int"}.newTable))
- result = newStmtList(nodes)
- echo result.repr
- proc generateType(name: string, fields: TableRef[string, string] ) : NimNode =
- var types = collect(newSeq):
- for k,v in fields:
- newIdentDefs(postfix(ident(k), "*"), ident(v))
- let typeDefinition = newTree(nnkTypeSection,
- newTree(nnkTypeDef,
- postfix(ident(name), "*"),
- newEmptyNode(),
- newTree(nnkRefTy,
- newTree(nnkObjectTy,
- newEmptyNode(),
- newEmptyNode(),
- newTree(nnkRecList,
- types
- )
- )
- )
- )
- )
- let procReturnAndMethodArguments = @[ident("string"), newColonExpr(ident("v"), ident(name))]
- let toStringMethod = newProc(name=ident("`$`"), params=procReturnAndMethodArguments, body=newStrLitNode("wibble"), NimNodeKind.nnkProcDef)
- result = newStmtList(typeDefinition, toStringMethod)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement