diff options
author | Bung <crc32@qq.com> | 2022-11-06 18:47:35 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-06 11:47:35 +0100 |
commit | fdc8dd41288c78052c21796b7e65e37cba71d316 (patch) | |
tree | 87b3cb8b2c606a953789af4bc79cefba5a905aa7 /tests/arc | |
parent | 93b085a57ad28c71056dd3da6c4daa56ef4713c4 (diff) | |
download | Nim-fdc8dd41288c78052c21796b7e65e37cba71d316.tar.gz |
Arc global (#20768)
* temp * unsure * fix condition * port macro arc runable examples to one file * trigger doc ci * fix Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
Diffstat (limited to 'tests/arc')
-rw-r--r-- | tests/arc/tarc_macro.nim | 46 | ||||
-rw-r--r-- | tests/arc/tarcmisc.nim | 2 |
2 files changed, 47 insertions, 1 deletions
diff --git a/tests/arc/tarc_macro.nim b/tests/arc/tarc_macro.nim new file mode 100644 index 000000000..ea7d279fd --- /dev/null +++ b/tests/arc/tarc_macro.nim @@ -0,0 +1,46 @@ +import macros + +var destroyCalled = false +macro bar() = + let s = newTree(nnkAccQuoted, ident"=destroy") + # let s = ident"`=destroy`" # this would not work + result = quote do: + type Foo = object + # proc `=destroy`(a: var Foo) = destroyCalled = true # this would not work + proc `s`(a: var Foo) = destroyCalled = true + block: + let a = Foo() +bar() +doAssert destroyCalled + +# custom `op` +var destroyCalled2 = false +macro bar(ident) = + var x = 1.5 + result = quote("@") do: + type Foo = object + let `@ident` = 0 # custom op interpolated symbols need quoted (``) + proc `=destroy`(a: var Foo) = + doAssert @x == 1.5 + doAssert compiles(@x == 1.5) + let b1 = @[1,2] + let b2 = @@[1,2] + doAssert $b1 == "[1, 2]" + doAssert $b2 == "@[1, 2]" + destroyCalled2 = true + block: + let a = Foo() +bar(someident) +doAssert destroyCalled2 + +proc `&%`(x: int): int = 1 +proc `&%`(x, y: int): int = 2 + +macro bar2() = + var x = 3 + result = quote("&%") do: + var y = &%x # quoting operator + doAssert &%&%y == 1 # unary operator => need to escape + doAssert y &% y == 2 # binary operator => no need to escape + doAssert y == 3 +bar2() \ No newline at end of file diff --git a/tests/arc/tarcmisc.nim b/tests/arc/tarcmisc.nim index 567daf982..3160d8a4d 100644 --- a/tests/arc/tarcmisc.nim +++ b/tests/arc/tarcmisc.nim @@ -124,7 +124,7 @@ proc test(count: int) = test(3) proc test2(count: int) = - #block: #XXX: Fails with block currently + block: #XXX: Fails with block currently var v {.global.} = newVariable(20) var count = count - 1 |