fixes unexpected transforming of runnableExamples (#9158)
This commit is contained in:
parent
33458894da
commit
173e8c4913
3 changed files with 9 additions and 7 deletions
|
|
@ -1660,6 +1660,11 @@ proc isCompileTimeProc*(s: PSym): bool {.inline.} =
|
||||||
result = s.kind == skMacro or
|
result = s.kind == skMacro or
|
||||||
s.kind == skProc and sfCompileTime in s.flags
|
s.kind == skProc and sfCompileTime in s.flags
|
||||||
|
|
||||||
|
proc isRunnableExamples*(n: PNode): bool =
|
||||||
|
# Templates and generics don't perform symbol lookups.
|
||||||
|
result = n.kind == nkSym and n.sym.magic == mRunnableExamples or
|
||||||
|
n.kind == nkIdent and n.ident.s == "runnableExamples"
|
||||||
|
|
||||||
proc requiredParams*(s: PSym): int =
|
proc requiredParams*(s: PSym): int =
|
||||||
# Returns the number of required params (without default values)
|
# Returns the number of required params (without default values)
|
||||||
# XXX: Perhaps we can store this in the `offset` field of the
|
# XXX: Perhaps we can store this in the `offset` field of the
|
||||||
|
|
|
||||||
|
|
@ -398,16 +398,11 @@ proc prepareExamples(d: PDoc; n: PNode) =
|
||||||
runnableExamples.add newTree(nkBlockStmt, newNode(nkEmpty), copyTree savedLastSon)
|
runnableExamples.add newTree(nkBlockStmt, newNode(nkEmpty), copyTree savedLastSon)
|
||||||
testExample(d, runnableExamples)
|
testExample(d, runnableExamples)
|
||||||
|
|
||||||
proc isRunnableExample(n: PNode): bool =
|
|
||||||
# Templates and generics don't perform symbol lookups.
|
|
||||||
result = n.kind == nkSym and n.sym.magic == mRunnableExamples or
|
|
||||||
n.kind == nkIdent and n.ident.s == "runnableExamples"
|
|
||||||
|
|
||||||
proc getAllRunnableExamplesRec(d: PDoc; n, orig: PNode; dest: var Rope) =
|
proc getAllRunnableExamplesRec(d: PDoc; n, orig: PNode; dest: var Rope) =
|
||||||
if n.info.fileIndex != orig.info.fileIndex: return
|
if n.info.fileIndex != orig.info.fileIndex: return
|
||||||
case n.kind
|
case n.kind
|
||||||
of nkCallKinds:
|
of nkCallKinds:
|
||||||
if isRunnableExample(n[0]) and
|
if isRunnableExamples(n[0]) and
|
||||||
n.len >= 2 and n.lastSon.kind == nkStmtList:
|
n.len >= 2 and n.lastSon.kind == nkStmtList:
|
||||||
prepareExamples(d, n)
|
prepareExamples(d, n)
|
||||||
dispA(d.conf, dest, "\n<p><strong class=\"examples_text\">$1</strong></p>\n",
|
dispA(d.conf, dest, "\n<p><strong class=\"examples_text\">$1</strong></p>\n",
|
||||||
|
|
|
||||||
|
|
@ -493,6 +493,8 @@ proc semTemplBody(c: var TemplCtx, n: PNode): PNode =
|
||||||
else:
|
else:
|
||||||
result = semTemplBodySons(c, n)
|
result = semTemplBodySons(c, n)
|
||||||
of nkCallKinds-{nkPostfix}:
|
of nkCallKinds-{nkPostfix}:
|
||||||
|
# do not transform runnableExamples (bug #9143)
|
||||||
|
if not isRunnableExamples(n[0]):
|
||||||
result = semTemplBodySons(c, n)
|
result = semTemplBodySons(c, n)
|
||||||
of nkDotExpr, nkAccQuoted:
|
of nkDotExpr, nkAccQuoted:
|
||||||
# dotExpr is ambiguous: note that we explicitly allow 'x.TemplateParam',
|
# dotExpr is ambiguous: note that we explicitly allow 'x.TemplateParam',
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue