implements https://github.com/nim-lang/RFCs/issues/258 (#15503)
* implements https://github.com/nim-lang/RFCs/issues/258 * don't be too strict with custom pragma blocks * cast pragmas: documentation * added most missing inference query procs to effecttraits.nim
This commit is contained in:
parent
acd71dd6bb
commit
92163fa330
16 changed files with 232 additions and 68 deletions
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
#
|
||||
# Nim's Runtime Library
|
||||
# (c) Copyright 2018 Nim contributors
|
||||
# (c) Copyright 2020 Nim contributors
|
||||
#
|
||||
# See the file "copying.txt", included in this
|
||||
# distribution, for details about the copyright.
|
||||
|
|
@ -9,11 +9,46 @@
|
|||
|
||||
## This module provides access to the inferred .raises effects
|
||||
## for Nim's macro system.
|
||||
## **Since**: Version 1.4.
|
||||
##
|
||||
## One can test for the existance of this standard module
|
||||
## via ``defined(nimHasEffectTraitsModule)``.
|
||||
|
||||
import macros
|
||||
|
||||
proc getRaisesListImpl(n: NimNode): NimNode = discard "see compiler/vmops.nim"
|
||||
proc getTagsListImpl(n: NimNode): NimNode = discard "see compiler/vmops.nim"
|
||||
proc isGcSafeImpl(n: NimNode): bool = discard "see compiler/vmops.nim"
|
||||
proc hasNoSideEffectsImpl(n: NimNode): bool = discard "see compiler/vmops.nim"
|
||||
|
||||
proc getRaisesList*(call: NimNode): NimNode =
|
||||
expectKind call, nnkCallKinds
|
||||
result = getRaisesListImpl(call[0])
|
||||
proc getRaisesList*(fn: NimNode): NimNode =
|
||||
## Extracts the ``.raises`` list of the func/proc/etc ``fn``.
|
||||
## ``fn`` has to be a resolved symbol of kind ``nnkSym``. This
|
||||
## implies that the macro that calls this proc should accept ``typed``
|
||||
## arguments and not ``untyped`` arguments.
|
||||
expectKind fn, nnkSym
|
||||
result = getRaisesListImpl(fn)
|
||||
|
||||
proc getTagsList*(fn: NimNode): NimNode =
|
||||
## Extracts the ``.tags`` list of the func/proc/etc ``fn``.
|
||||
## ``fn`` has to be a resolved symbol of kind ``nnkSym``. This
|
||||
## implies that the macro that calls this proc should accept ``typed``
|
||||
## arguments and not ``untyped`` arguments.
|
||||
expectKind fn, nnkSym
|
||||
result = getTagsListImpl(fn)
|
||||
|
||||
proc isGcSafe*(fn: NimNode): bool =
|
||||
## Return true if the func/proc/etc ``fn`` is `gcsafe`.
|
||||
## ``fn`` has to be a resolved symbol of kind ``nnkSym``. This
|
||||
## implies that the macro that calls this proc should accept ``typed``
|
||||
## arguments and not ``untyped`` arguments.
|
||||
expectKind fn, nnkSym
|
||||
result = isGcSafeImpl(fn)
|
||||
|
||||
proc hasNoSideEffects*(fn: NimNode): bool =
|
||||
## Return true if the func/proc/etc ``fn`` has `noSideEffect`.
|
||||
## ``fn`` has to be a resolved symbol of kind ``nnkSym``. This
|
||||
## implies that the macro that calls this proc should accept ``typed``
|
||||
## arguments and not ``untyped`` arguments.
|
||||
expectKind fn, nnkSym
|
||||
result = hasNoSideEffectsImpl(fn)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue