Files
Nim/tests/template/utemplates.nim
metagn d1d141b135 new .redefine pragma for templates, warn on redefinition without it (#20211)
* test CI for template redefinitions

* adapt asyncmacro

* fix quote

* fix again

* try something else

* revert

* fix ioselectors_select, disable packages CI

* adapt more tests & simplify

* more

* more

* more

* rename to redefine, warn on implicit redefinition

* basic documentation [skip ci]

* Update compiler/lineinfos.nim

Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>

Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
2022-08-23 21:41:30 +02:00

37 lines
921 B
Nim

import unittest
template t(a: int): string = "int"
template t(a: string): string = "string"
block: # templates can be overloaded
check t(10) == "int"
check t("test") == "string"
block: # previous definitions can be further overloaded or hidden in local scopes
template t(a: bool): string = "bool"
check t(true) == "bool"
check t(10) == "int"
template t(a: int): string = "inner int"
check t(10) == "inner int"
check t("test") == "string"
block: # templates can be redefined multiple times
template customAssert(cond: bool, msg: string): typed {.dirty.} =
if not cond: fail(msg)
template assertionFailed(body: untyped) {.dirty.} =
template fail(msg: string): typed {.redefine.} =
body
assertionFailed:
check(msg == "first fail path")
customAssert false, "first fail path"
assertionFailed:
check(msg == "second fail path")
customAssert false, "second fail path"