Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import macros
- macro typedefImportC*(name: untyped, importc: string, header: string, typ: untyped): typed =
- var whenStmt = newNimNode(nnkWhenStmt)
- var useWinSdkBranch = newNimNode(nnkElifBranch)
- var useWinSdkCond = newNimNode(nnkCall)
- useWinSdkCond.add(newIdentNode(!"defined"), newIdentNode(!"useWinSdk"))
- useWinSdkBranch.add()
- var winSdkTypeDef = newNimNode(nnkTypeDef)
- winSdkTypeDef.add(name)
- var winSdkTypePragma = newNimNode(nnkPragma)
- winSdkTypePragma.add(newColonExpr(newIdentNode(!"importC"), importc))
- winSdkTypePragma.add(newColonExpr(newIdentNode(!"header"), header))
- winSdkTypeDef.add(winSdkTypePragma)
- winSdkTypeDef.add(typ)
- useWinSdkBranch.add(winSdkTypePragma)
- whenStmt.add(useWinSdkBranch)
- var elseBranch = newNimNode(nnkElse)
- var elseTypeDef = newNimNode(nnkTypeDef)
- elseTypeDef.add(name, newEmptyNode(), typ)
- elseBranch.add(elseTypeDef)
- whenStmt.add(elseBranch)
- result = whenStmt
- when isMainModule:
- typedefImportC(NimType, "ImportedType", "header.h", int32)
- var x: NimType
- x = 42
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement