tpush.nim 1012 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. discard """
  2. targets: "c js"
  3. """
  4. # test the new pragmas
  5. {.push warnings: off, hints: off.}
  6. proc noWarning() =
  7. var
  8. x: int
  9. echo(x)
  10. {.pop.}
  11. proc WarnMe() =
  12. var
  13. x: int
  14. echo(x)
  15. # bug #11852
  16. proc foo(x: string, y: int, res: int) =
  17. {.push checks: off}
  18. var a: ptr char = unsafeAddr(x[y])
  19. {.pop.}
  20. if x.len > y:
  21. doAssert ord(a[]) == 51
  22. else:
  23. doAssert x.len + 48 == res
  24. foo("", 0, 48)
  25. foo("abc", 40, 51)
  26. # bug #22362
  27. {.push staticBoundChecks: on.}
  28. proc main(): void =
  29. {.pop.}
  30. discard
  31. {.push staticBoundChecks: on.}
  32. main()
  33. {.push exportC.}
  34. block:
  35. proc foo11() =
  36. const factor = [1, 2, 3, 4]
  37. doAssert factor[0] == 1
  38. proc foo21() =
  39. const factor = [1, 2, 3, 4]
  40. doAssert factor[0] == 1
  41. foo11()
  42. foo21()
  43. template foo31() =
  44. let factor = [1, 2, 3, 4]
  45. doAssert factor[0] == 1
  46. template foo41() =
  47. let factor = [1, 2, 3, 4]
  48. doAssert factor[0] == 1
  49. foo31()
  50. foo41()
  51. {.pop.}
  52. block:
  53. {.push deprecated.}
  54. template test() = discard
  55. test()
  56. {.pop.}