mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-01 02:42:05 +00:00
76 lines
1.7 KiB
Nim
76 lines
1.7 KiB
Nim
discard """
|
|
errormsg: "expression '123' is of type 'int literal(123)' and has to be used (or discarded)"
|
|
line: 71
|
|
"""
|
|
|
|
import macros
|
|
|
|
proc foo(a, b, c: int): int =
|
|
result += a
|
|
result += b
|
|
result += c
|
|
|
|
macro bar(a, b, c: int): int =
|
|
result = newCall(ident"echo")
|
|
result.add a
|
|
result.add b
|
|
result.add c
|
|
|
|
macro baz(a, b, c: int): int =
|
|
let stmt = nnkStmtListExpr.newTree()
|
|
stmt.add newCall(ident"echo", a)
|
|
stmt.add newCall(ident"echo", b)
|
|
stmt.add newCall(ident"echo", c)
|
|
stmt.add newLit(123)
|
|
return c
|
|
|
|
# test no result type with explicit return
|
|
|
|
macro baz2(a, b, c: int) =
|
|
let stmt = nnkStmtListExpr.newTree()
|
|
stmt.add newCall(ident"echo", a)
|
|
stmt.add newCall(ident"echo", b)
|
|
stmt.add newCall(ident"echo", c)
|
|
return stmt
|
|
|
|
# test explicit void type with explicit return
|
|
|
|
macro baz3(a, b, c: int): void =
|
|
let stmt = nnkStmtListExpr.newTree()
|
|
stmt.add newCall(ident"echo", a)
|
|
stmt.add newCall(ident"echo", b)
|
|
stmt.add newCall(ident"echo", c)
|
|
return stmt
|
|
|
|
# test no result type with result variable
|
|
|
|
macro baz4(a, b, c: int) =
|
|
result = nnkStmtListExpr.newTree()
|
|
result.add newCall(ident"echo", a)
|
|
result.add newCall(ident"echo", b)
|
|
result.add newCall(ident"echo", c)
|
|
|
|
# test explicit void type with result variable
|
|
|
|
macro baz5(a, b, c: int): void =
|
|
let result = nnkStmtListExpr.newTree()
|
|
result.add newCall(ident"echo", a)
|
|
result.add newCall(ident"echo", b)
|
|
result.add newCall(ident"echo", c)
|
|
|
|
macro foobar1(): int =
|
|
result = quote do:
|
|
echo "Hello World"
|
|
1337
|
|
|
|
echo foobar1()
|
|
|
|
# this should create an error message, because 123 has to be discarded.
|
|
|
|
macro foobar2() =
|
|
result = quote do:
|
|
echo "Hello World"
|
|
123
|
|
|
|
echo foobar2()
|