12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- 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()
|