Advertisement
Guest User

nim-typeImportC-macro

a guest
Apr 7th, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 1.05 KB | None | 0 0
  1. import macros
  2.  
  3. macro typedefImportC*(name: untyped, importc: string, header: string, typ: untyped): typed =
  4.   var whenStmt = newNimNode(nnkWhenStmt)
  5.   var useWinSdkBranch = newNimNode(nnkElifBranch)
  6.   var useWinSdkCond = newNimNode(nnkCall)
  7.   useWinSdkCond.add(newIdentNode(!"defined"), newIdentNode(!"useWinSdk"))
  8.   useWinSdkBranch.add()
  9.   var winSdkTypeDef = newNimNode(nnkTypeDef)
  10.   winSdkTypeDef.add(name)
  11.   var winSdkTypePragma = newNimNode(nnkPragma)
  12.   winSdkTypePragma.add(newColonExpr(newIdentNode(!"importC"), importc))
  13.   winSdkTypePragma.add(newColonExpr(newIdentNode(!"header"), header))
  14.   winSdkTypeDef.add(winSdkTypePragma)
  15.   winSdkTypeDef.add(typ)
  16.   useWinSdkBranch.add(winSdkTypePragma)
  17.   whenStmt.add(useWinSdkBranch)
  18.   var elseBranch = newNimNode(nnkElse)
  19.   var elseTypeDef = newNimNode(nnkTypeDef)
  20.   elseTypeDef.add(name, newEmptyNode(), typ)
  21.   elseBranch.add(elseTypeDef)
  22.   whenStmt.add(elseBranch)
  23.   result = whenStmt
  24.  
  25. when isMainModule:
  26.   typedefImportC(NimType, "ImportedType", "header.h", int32)
  27.   var x: NimType
  28.   x = 42
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement