Fix nimterop imports
This commit is contained in:
parent
674d842415
commit
93c83728c7
2 changed files with 43 additions and 1 deletions
42
nimterop/enumtypepub.nim
Normal file
42
nimterop/enumtypepub.nim
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
import macros
|
||||||
|
|
||||||
|
macro defineEnum*(typ: untyped): untyped =
|
||||||
|
result = newNimNode(nnkStmtList)
|
||||||
|
|
||||||
|
# Enum mapped to distinct cint
|
||||||
|
result.add quote do:
|
||||||
|
type `typ`* = distinct cint
|
||||||
|
|
||||||
|
for i in ["+", "-", "*", "div", "mod", "shl", "shr", "or", "and", "xor", "<", "<=", "==", ">", ">="]:
|
||||||
|
let
|
||||||
|
ni = newIdentNode(i)
|
||||||
|
typout = if i[0] in "<=>": newIdentNode("bool") else: typ # comparisons return bool
|
||||||
|
if i[0] == '>': # cannot borrow `>` and `>=` from templates
|
||||||
|
let
|
||||||
|
nopp = if i.len == 2: newIdentNode("<=") else: newIdentNode("<")
|
||||||
|
result.add quote do:
|
||||||
|
proc `ni`*(x: `typ`, y: cint): `typout` = `nopp`(y, x)
|
||||||
|
proc `ni`*(x: cint, y: `typ`): `typout` = `nopp`(y, x)
|
||||||
|
proc `ni`*(x, y: `typ`): `typout` = `nopp`(y, x)
|
||||||
|
else:
|
||||||
|
result.add quote do:
|
||||||
|
proc `ni`*(x: `typ`, y: cint): `typout` {.borrow.}
|
||||||
|
proc `ni`*(x: cint, y: `typ`): `typout` {.borrow.}
|
||||||
|
proc `ni`*(x, y: `typ`): `typout` {.borrow.}
|
||||||
|
result.add quote do:
|
||||||
|
proc `ni`*(x: `typ`, y: int): `typout` = `ni`(x, y.cint)
|
||||||
|
proc `ni`*(x: int, y: `typ`): `typout` = `ni`(x.cint, y)
|
||||||
|
|
||||||
|
let
|
||||||
|
divop = newIdentNode("/") # `/`()
|
||||||
|
dlrop = newIdentNode("$") # `$`()
|
||||||
|
notop = newIdentNode("not") # `not`()
|
||||||
|
result.add quote do:
|
||||||
|
proc `divop`*(x, y: `typ`): `typ` = `typ`((x.float / y.float).cint)
|
||||||
|
proc `divop`*(x: `typ`, y: cint): `typ` = `divop`(x, `typ`(y))
|
||||||
|
proc `divop`*(x: cint, y: `typ`): `typ` = `divop`(`typ`(x), y)
|
||||||
|
proc `divop`*(x: `typ`, y: int): `typ` = `divop`(x, y.cint)
|
||||||
|
proc `divop`*(x: int, y: `typ`): `typ` = `divop`(x.cint, y)
|
||||||
|
|
||||||
|
proc `dlrop`*(x: `typ`): string {.borrow.}
|
||||||
|
proc `notop`*(x: `typ`): `typ` {.borrow.}
|
||||||
|
|
@ -31,7 +31,7 @@ yield""".split(Whitespace).toHashSet()
|
||||||
|
|
||||||
const
|
const
|
||||||
# Enum macro read from file - written into wrapper when required
|
# Enum macro read from file - written into wrapper when required
|
||||||
gEnumMacroConst = staticRead(currentSourcePath.parentDir().parentDir() / "enumtype.nim")
|
gEnumMacroConst = "import nimterop / enumtypepub"
|
||||||
|
|
||||||
var
|
var
|
||||||
gEnumMacro* = gEnumMacroConst
|
gEnumMacro* = gEnumMacroConst
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue