123456789101112131415161718192021222324252627282930313233343536373839 |
- #
- #
- # Nim's Runtime Library
- # (c) Copyright 2022 Nim contributors
- #
- # See the file "copying.txt", included in this
- # distribution, for details about the copyright.
- #
- ## `outParamsAt` macro for easy writing code that works with both 2.0 and 1.x.
- import macros
- macro outParamsAt*(positions: static openArray[int]; n: untyped): untyped =
- ## Use this macro to annotate `out` parameters in a portable way.
- runnableExamples:
- proc p(x: var int) {.outParamsAt: [1].} =
- discard "x is really an 'out int' if the Nim compiler supports 'out' parameters"
- result = n
- when defined(nimHasOutParams):
- var p = n.params
- for po in positions:
- p[po][^2].expectKind nnkVarTy
- p[po][^2] = newTree(nnkOutTy, p[po][^2][0])
- when isMainModule:
- {.experimental: "strictDefs".}
- proc main(x: var int) {.outParamsAt: [1].} =
- x = 3
- proc us =
- var x: int
- main x
- echo x
- us()
|