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:
ringabout 2022-10-24 16:08:39 +08:00 • committed by GitHub
commit 98b2838a30
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 3 deletions

View file

@ -2130,10 +2130,11 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
localError(c.config, n.info, "the overloaded " & s.name.s &
" 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:
# 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
cursorInProc(c.config, n[bodyPos]):
# speed up nimsuggest

View file

@ -29,4 +29,20 @@ baz.doThing()
assert $seq[int](foo) == $foo
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