summary refs log tree commit diff stats
path: root/TODO
diff options
context:
space:
mode:
authorhut <hut@lavabit.com>2010-10-15 06:01:27 +0200
committerhut <hut@lavabit.com>2010-10-15 06:02:01 +0200
commitb0e65cb151f2395c7b1496dc775ad46641ba01c6 (patch)
tree4209f85c2bf9abf63a14eccb219bd177adec5cc8 /TODO
parent5b8b6d605bbb8af8ca5633117a3ca36df0c84b0a (diff)
downloadranger-b0e65cb151f2395c7b1496dc775ad46641ba01c6.tar.gz
core.environment: update import
Diffstat (limited to 'TODO')
0 files changed, 0 insertions, 0 deletions
id='n39' href='#n39'>39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59



























                                                             
                                      





























                                                                        
import macros,json

var decls{.compileTime.}: seq[PNimrodNode] = @[]
var impls{.compileTime.}: seq[PNimrodNode] = @[]

macro importImpl_forward(name, returns): stmt {.immediate.} =
  result = newNimNode(nnkEmpty)
  var func_name = newNimNode(nnkAccQuoted)
  func_name.add newIdentNode("import")
  func_name.add name

  var res = newNimNode(nnkProcDef)
  res.add newNimNode(nnkPostfix)
  res[0].add newIdentNode("*")
  res[0].add func_name
  res.add newNimNode(nnkEmpty)
  res.add newNimNode(nnkEmpty)
  res.add newNimNode(nnkFormalParams)
  res[3].add returns
  var p1 = newNimNode(nnkIdentDefs)
  p1.add newIdentNode("dat")
  p1.add newIdentNOde("PJsonNode")
  p1.add newNimNode(nnkEmpty)
  res[3].add p1
  var p2 = newNimNode(nnkIdentDefs)
  p2.add newIdentNode("errors")
  p2.add newNimNode(nnkVarTy)
  p2.add newNimNode(nnkEmpty)
  p2[1].add newNimNode(nnkBracketExpr)
  p2[1][0].add newIdentNode("seq")
  p2[1][0].add newIdentNode("string")
  res[3].add p2

  res.add newNimNode(nnkEmpty)
  res.add newNimNode(nnkEmpty)
  res.add newNimNode(nnkEmpty)

  decls.add res
  echo(repr(res))

macro importImpl(name, returns: expr, body: stmt): stmt {.immediate.} = 
  #var res = getAST(importImpl_forward(name, returns))
  discard getAST(importImpl_forward(name, returns))
  var res = copyNimTree(decls[decls.high])
  res[6] = body
  echo repr(res)
  impls.add res

macro okayy:stmt =
  result = newNimNode(nnkStmtList)
  for node in decls: result.add node
  for node in impls: result.add node

importimpl(Item, int):
  echo 42
importImpl(Foo, int16):
  echo 77

okayy