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.