Files
Nim/tests/dll/client.nim
Euan c5c6bae2a4 #12103 - CI for FreeBSD (#12179)
* Ref #12103 - adds FreeBSD CI
* Fix getApplFreebsd - length of the string includes the null terminator byte, so minus 1 for result length
* Show last commit in setup task.
* Remove .git from repository URL
* Don't include noisy details showing last commit.
* Add FreeBSD build status badge
* Fix #12182 - disable tconsole on FreeBSD
* Disable tgetaddrinfo on FreebSD as getaddrinfo doesn't support the ICMP protocol.
* Install boehm-gc-threaded
* Use libgc-threaded.so on FreeBSD rather than libgc.so.
* Simplify build failure handling. Update alt text for CI badge.
* Disable test on FreeBSD
* Simplify build config

- use GNU make to build csources
- set PATH variable using the environment key
- remove modification of config to set CC as this is already set

* Install git which seems to be missing from current freebsd images
* Revert change to how path is set
* Add a comment explaining why the length is truncated
* Fix tconsole.
2019-11-29 21:00:54 +01:00

43 lines
995 B
Nim

discard """
output: "Done"
disabled: "freebsd"
cmd: "nim $target --debuginfo --hints:on --define:useNimRtl $options $file"
"""
type
TNodeKind = enum nkLit, nkSub, nkAdd, nkDiv, nkMul
TNode = object
case k: TNodeKind
of nkLit: x: int
else: a, b: ref TNode
PNode = ref TNode
when defined(windows):
const dllname = "server.dll"
elif defined(macosx):
const dllname = "libserver.dylib"
else:
const dllname = "libserver.so"
proc newLit(x: int): PNode {.importc: "newLit", dynlib: dllname.}
proc newOp(k: TNodeKind, a, b: PNode): PNode {.
importc: "newOp", dynlib: dllname.}
proc buildTree(x: int): PNode {.importc: "buildTree", dynlib: dllname.}
proc eval(n: PNode): int =
case n.k
of nkLit: result = n.x
of nkSub: result = eval(n.a) - eval(n.b)
of nkAdd: result = eval(n.a) + eval(n.b)
of nkDiv: result = eval(n.a) div eval(n.b)
of nkMul: result = eval(n.a) * eval(n.b)
# Test the GC:
for i in 0..100_000:
discard eval(buildTree(2))
echo "Done"