Skip to content

Instantly share code, notes, and snippets.

@ozra
Created June 12, 2015 16:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ozra/dfb2c3f9e12787e08408 to your computer and use it in GitHub Desktop.
Save ozra/dfb2c3f9e12787e08408 to your computer and use it in GitHub Desktop.
Throw up macro for proc creation
macro Λ*(b: expr): expr {.immediate.} =
echo b.tree–repr
echo " < - - - >"
echo b.to–str–lit()
var par: NimNode
var params: seq[NimNode] = @[new–IdentNode("T")]
par = new–NimNode(nnk–IdentDefs)
par.add new–IdentNode("x")
par.add new–IdentNode("T") # $ T.name # "auto"
par.add new–EmptyNode()
params.add par
var gen–params = new–NimNode(nnk–GenericParams)
par = new–NimNode(nnk–IdentDefs)
par.add new–IdentNode("T")
# par.add new–IdentNode("Tx")
# par.add new–IdentNode("Ty")
par.add(new–EmptyNode())
par.add(new–EmptyNode())
gen–params.add par
let formal–params = new–NimNode(nnk–FormalParams).add(params)
let pragmas = new–NimNode(nnk–Pragma).add(new–IdentNode("closure"))
# result = newNimNode(nnk–Lambda).add(
result = newNimNode(nnk–ProcDef).add(
new–EmptyNode(),
new–EmptyNode(),
gen–params,
formal–params,
pragmas, # new–EmptyNode(),
new–EmptyNode(),
b
)
echo " < - - - >"
echo " < - - - >"
echo result.tree–repr
echo " < - - - >"
echo result.to–str–lit()
return result # TODO: Bug?
var foo = Λ((let a = x + 3; let b = 47.0; a - b - 2 + x))
echo foo.type.name
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment