Raw Text Content QR Edit Remove
falcon-snail-deer



import std/macros

proc getName(n: NimNode): NimNode =
  case n.kind
  of nnkPragmaExpr:
    n[0]
  else:
    error("unexpected node kind: " & $n.kind)

macro checkSize*(size: int, typeDef: untyped): untyped =
  typeDef.expectKind nnkTypeDef
  let staticStmt = nnkStaticStmt.newTree(
    newCall(
      bindSym"assert",
      nnkInfix.newTree(
        bindSym"==",
        newCall(
          bindSym"sizeof",
          getName(typeDef[0]),
        ),
        size,
      ),
    ),
  )
  result = nnkTypeDef.newTree(
    genSym(nskType, "_"),
    newEmptyNode(),
    nnkStmtListType.newTree(
      nnkTypeSection.newTree(typeDef),
      staticStmt,
      bindSym"void",
    ),
  )

Read 15 times, last 49 minutes ago


FILES WILL BE PURGED if not accessed after 90 days – despite of your settings! A CLI tool is on the MicroBin roadmap (which this service is based on).


[ TOS / Privacy / Legal / Donate to tchncs ]
tchncs is based in Germany and obligated to german law.