tmacro1.nim 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import macros
  2. from uri import `/`
  3. macro test*(a: untyped): untyped =
  4. var nodes: tuple[a, b: int]
  5. nodes.a = 4
  6. nodes[1] = 45
  7. type
  8. TTypeEx = object
  9. x, y: int
  10. case b: bool
  11. of false: nil
  12. of true: z: float
  13. var t: TTypeEx
  14. t.b = true
  15. t.z = 4.5
  16. test:
  17. "hi"
  18. import strutils
  19. template assertNot(arg: untyped): untyped =
  20. assert(not(arg))
  21. proc foo(arg: int): void =
  22. discard
  23. proc foo(arg: float): void =
  24. discard
  25. static:
  26. ## test eqIdent
  27. let a = "abc_def"
  28. let b = "abcDef"
  29. let c = "AbcDef"
  30. let d = nnkBracketExpr.newTree() # not an identifier at all
  31. assert eqIdent( a , b )
  32. assert eqIdent(newIdentNode(a), b )
  33. assert eqIdent( a , newIdentNode(b))
  34. assert eqIdent(newIdentNode(a), newIdentNode(b))
  35. assert eqIdent( a , b )
  36. assert eqIdent(genSym(nskLet, a), b )
  37. assert eqIdent( a , genSym(nskLet, b))
  38. assert eqIdent(genSym(nskLet, a), genSym(nskLet, b))
  39. assert eqIdent(newIdentNode( a), newIdentNode( b))
  40. assert eqIdent(genSym(nskLet, a), newIdentNode( b))
  41. assert eqIdent(newIdentNode( a), genSym(nskLet, b))
  42. assert eqIdent(genSym(nskLet, a), genSym(nskLet, b))
  43. assertNot eqIdent( c , b )
  44. assertNot eqIdent(newIdentNode(c), b )
  45. assertNot eqIdent( c , newIdentNode(b))
  46. assertNot eqIdent(newIdentNode(c), newIdentNode(b))
  47. assertNot eqIdent( c , b )
  48. assertNot eqIdent(genSym(nskLet, c), b )
  49. assertNot eqIdent( c , genSym(nskLet, b))
  50. assertNot eqIdent(genSym(nskLet, c), genSym(nskLet, b))
  51. assertNot eqIdent(newIdentNode( c), newIdentNode( b))
  52. assertNot eqIdent(genSym(nskLet, c), newIdentNode( b))
  53. assertNot eqIdent(newIdentNode( c), genSym(nskLet, b))
  54. assertNot eqIdent(genSym(nskLet, c), genSym(nskLet, b))
  55. # eqIdent on non identifier at all
  56. assertNot eqIdent(a,d)
  57. # eqIdent on sym choice
  58. let fooSym = bindSym"foo"
  59. assert fooSym.kind in {nnkOpenSymChoice, nnkClosedSymChoice}
  60. assert fooSym.eqIdent("fOO")
  61. assertNot fooSym.eqIdent("bar")
  62. var empty: NimNode
  63. var myLit = newLit("str")
  64. assert( (empty or myLit) == myLit )
  65. empty = newEmptyNode()
  66. assert( (empty or myLit) == myLit )
  67. proc bottom(): NimNode =
  68. quit("may not be evaluated")
  69. assert( (myLit or bottom()) == myLit )