From d01245e501c3d90449383d055da9cb1fe5a24a7f Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Thu, 2 Apr 2020 11:52:31 +0200 Subject: renamed new std/pragmas.nim to std/byaddr.nim (#13844) * renamed new std/pragmas.nim to std/byaddr.nim * minor code cleanup --- tests/stdlib/tbyaddr.nim | 70 +++++++++++++++++++++++++++++++++++++++++++++++ tests/stdlib/tpragmas.nim | 70 ----------------------------------------------- 2 files changed, 70 insertions(+), 70 deletions(-) create mode 100644 tests/stdlib/tbyaddr.nim delete mode 100644 tests/stdlib/tpragmas.nim (limited to 'tests/stdlib') diff --git a/tests/stdlib/tbyaddr.nim b/tests/stdlib/tbyaddr.nim new file mode 100644 index 000000000..b485635c7 --- /dev/null +++ b/tests/stdlib/tbyaddr.nim @@ -0,0 +1,70 @@ +import std/byaddr + +block: + var s = @[10,11,12] + var a {.byaddr.} = s[0] + a+=100 + doAssert s == @[110,11,12] + doAssert a is int + var b {.byaddr.}: int = s[0] + doAssert a.addr == b.addr + + doAssert not compiles(block: + # redeclaration not allowed + var foo = 0 + var foo {.byaddr.} = s[0]) + + doAssert not compiles(block: + # ditto + var foo {.byaddr.} = s[0] + var foo {.byaddr.} = s[0]) + + block: + var b {.byaddr.} = s[1] # redeclaration ok in sub scope + b = 123 + + doAssert s == @[110,123,12] + + b = b * 10 + doAssert s == @[1100,123,12] + + doAssert not compiles(block: + var b2 {.byaddr.}: float = s[2]) + + doAssert compiles(block: + var b2 {.byaddr.}: int = s[2]) + +## We can define custom pragmas in user code +template byUnsafeAddr(lhs, typ, expr) = + when typ is type(nil): + let tmp = unsafeAddr(expr) + else: + let tmp: ptr typ = unsafeAddr(expr) + template lhs: untyped = tmp[] + +block: + let s = @["foo", "bar"] + let a {.byUnsafeAddr.} = s[0] + doAssert a == "foo" + doAssert a[0].unsafeAddr == s[0][0].unsafeAddr + +block: # nkAccQuoted + # shows using a keyword, which requires nkAccQuoted + template `cast`(lhs, typ, expr) = + when typ is type(nil): + let tmp = unsafeAddr(expr) + else: + let tmp: ptr typ = unsafeAddr(expr) + template lhs: untyped = tmp[] + + block: + let s = @["foo", "bar"] + let a {.`byUnsafeAddr`.} = s[0] + doAssert a == "foo" + doAssert a[0].unsafeAddr == s[0][0].unsafeAddr + + block: + let s = @["foo", "bar"] + let a {.`cast`.} = s[0] + doAssert a == "foo" + doAssert a[0].unsafeAddr == s[0][0].unsafeAddr diff --git a/tests/stdlib/tpragmas.nim b/tests/stdlib/tpragmas.nim deleted file mode 100644 index b91d7e547..000000000 --- a/tests/stdlib/tpragmas.nim +++ /dev/null @@ -1,70 +0,0 @@ -import std/pragmas - -block: - var s = @[10,11,12] - var a {.byaddr.} = s[0] - a+=100 - doAssert s == @[110,11,12] - doAssert a is int - var b {.byaddr.}: int = s[0] - doAssert a.addr == b.addr - - doAssert not compiles(block: - # redeclaration not allowed - var foo = 0 - var foo {.byaddr.} = s[0]) - - doAssert not compiles(block: - # ditto - var foo {.byaddr.} = s[0] - var foo {.byaddr.} = s[0]) - - block: - var b {.byaddr.} = s[1] # redeclaration ok in sub scope - b = 123 - - doAssert s == @[110,123,12] - - b = b * 10 - doAssert s == @[1100,123,12] - - doAssert not compiles(block: - var b2 {.byaddr.}: float = s[2]) - - doAssert compiles(block: - var b2 {.byaddr.}: int = s[2]) - -## We can define custom pragmas in user code -template byUnsafeAddr(lhs, typ, expr) = - when typ is type(nil): - let tmp = unsafeAddr(expr) - else: - let tmp: ptr typ = unsafeAddr(expr) - template lhs: untyped = tmp[] - -block: - let s = @["foo", "bar"] - let a {.byUnsafeAddr.} = s[0] - doAssert a == "foo" - doAssert a[0].unsafeAddr == s[0][0].unsafeAddr - -block: # nkAccQuoted - # shows using a keyword, which requires nkAccQuoted - template `cast`(lhs, typ, expr) = - when typ is type(nil): - let tmp = unsafeAddr(expr) - else: - let tmp: ptr typ = unsafeAddr(expr) - template lhs: untyped = tmp[] - - block: - let s = @["foo", "bar"] - let a {.`byUnsafeAddr`.} = s[0] - doAssert a == "foo" - doAssert a[0].unsafeAddr == s[0][0].unsafeAddr - - block: - let s = @["foo", "bar"] - let a {.`cast`.} = s[0] - doAssert a == "foo" - doAssert a[0].unsafeAddr == s[0][0].unsafeAddr -- cgit 1.4.1-2-gfad0 n35'>35 36 37