tconststaticvar.nim 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. block: # issue #8758
  2. template baz() =
  3. var i = 0
  4. proc foo() =
  5. static:
  6. var i = 0
  7. baz()
  8. block: # issue #10828
  9. proc test(i: byte): bool =
  10. const SET = block: # No issues when defined outside proc
  11. var s: set[byte]
  12. for i in 0u8 .. 255u8: incl(s, i)
  13. s
  14. return i in SET
  15. doAssert test(0)
  16. doAssert test(127)
  17. doAssert test(255)
  18. block: # issue #12172
  19. const TEST = block:
  20. var test: array[5, string]
  21. for i in low(test)..high(test):
  22. test[i] = $i
  23. test
  24. proc test =
  25. const TEST2 = block:
  26. var test: array[5, string] # Error here
  27. for i in low(test)..high(test):
  28. test[i] = $i
  29. test
  30. doAssert TEST == TEST2
  31. doAssert TEST == @["0", "1", "2", "3", "4"]
  32. doAssert TEST2 == @["0", "1", "2", "3", "4"]
  33. test()
  34. block: # issue #21610
  35. func stuff(): int =
  36. const r = block:
  37. var r = 1 # Error: cannot evaluate at compile time: r
  38. for i in 2..10:
  39. r *= i
  40. r
  41. r
  42. doAssert stuff() == 3628800
  43. block: # issue #23803
  44. func foo1(c: int): int {.inline.} =
  45. const arr = block:
  46. var res: array[0..99, int]
  47. res[42] = 43
  48. res
  49. arr[c]
  50. doAssert foo1(41) == 0
  51. doAssert foo1(42) == 43
  52. doAssert foo1(43) == 0
  53. # works
  54. func foo2(c: int): int {.inline.} =
  55. func initArr(): auto =
  56. var res: array[0..99, int]
  57. res[42] = 43
  58. res
  59. const arr = initArr()
  60. arr[c]
  61. doAssert foo2(41) == 0
  62. doAssert foo2(42) == 43
  63. doAssert foo2(43) == 0
  64. # also works
  65. const globalArr = block:
  66. var res: array[0..99, int]
  67. res[42] = 43
  68. res
  69. func foo3(c: int): int {.inline.} = globalArr[c]
  70. doAssert foo3(41) == 0
  71. doAssert foo3(42) == 43
  72. doAssert foo3(43) == 0