borrowed procs can have a body now for documentation generation (#20617)
* borrowed procs can have a body now * fixes examples
This commit is contained in:
parent
008c3ec76a
commit
98b2838a30
2 changed files with 20 additions and 3 deletions
|
|
@ -2130,10 +2130,11 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
|
||||||
localError(c.config, n.info, "the overloaded " & s.name.s &
|
localError(c.config, n.info, "the overloaded " & s.name.s &
|
||||||
" operator has to be enabled with {.experimental: \"callOperator\".}")
|
" operator has to be enabled with {.experimental: \"callOperator\".}")
|
||||||
|
|
||||||
|
if sfBorrow in s.flags and c.config.cmd notin cmdDocLike:
|
||||||
|
result[bodyPos] = c.graph.emptyNode
|
||||||
|
|
||||||
if n[bodyPos].kind != nkEmpty and sfError notin s.flags:
|
if n[bodyPos].kind != nkEmpty and sfError notin s.flags:
|
||||||
# for DLL generation we allow sfImportc to have a body, for use in VM
|
# for DLL generation we allow sfImportc to have a body, for use in VM
|
||||||
if sfBorrow in s.flags:
|
|
||||||
localError(c.config, n[bodyPos].info, errImplOfXNotAllowed % s.name.s)
|
|
||||||
if c.config.ideCmd in {ideSug, ideCon} and s.kind notin {skMacro, skTemplate} and not
|
if c.config.ideCmd in {ideSug, ideCon} and s.kind notin {skMacro, skTemplate} and not
|
||||||
cursorInProc(c.config, n[bodyPos]):
|
cursorInProc(c.config, n[bodyPos]):
|
||||||
# speed up nimsuggest
|
# speed up nimsuggest
|
||||||
|
|
|
||||||
|
|
@ -29,4 +29,20 @@ baz.doThing()
|
||||||
|
|
||||||
assert $seq[int](foo) == $foo
|
assert $seq[int](foo) == $foo
|
||||||
assert $seq[int](bar) == $bar
|
assert $seq[int](bar) == $bar
|
||||||
assert $seq[int](baz) == $baz
|
assert $seq[int](baz) == $baz
|
||||||
|
|
||||||
|
type
|
||||||
|
Fine* = distinct string
|
||||||
|
|
||||||
|
proc `==`*(x, y: Fine): bool {.borrow.} =
|
||||||
|
## Here is the documentation
|
||||||
|
runnableExamples:
|
||||||
|
var x = Fine("1234")
|
||||||
|
var y = Fine("1234")
|
||||||
|
doAssert x == y
|
||||||
|
doAssert false
|
||||||
|
|
||||||
|
|
||||||
|
var x = Fine("1234")
|
||||||
|
var y = Fine("1234")
|
||||||
|
doAssert x == y
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue