Return an error symbol as macro output if needed (#8116)
Return an error symbol if the macro output has no type and a typedesc is expected. Fixes #7454
This commit is contained in:
parent
7f148838a4
commit
52fc16d5d2
2 changed files with 14 additions and 1 deletions
|
|
@ -412,6 +412,11 @@ proc semAfterMacroCall(c: PContext, call, macroResult: PNode,
|
|||
of tyTypeDesc:
|
||||
if result.kind == nkStmtList: result.kind = nkStmtListType
|
||||
var typ = semTypeNode(c, result, nil)
|
||||
if typ == nil:
|
||||
localError(c.config, result.info, "expression has no type: " &
|
||||
renderTree(result, {renderNoComments}))
|
||||
result = newSymNode(errorSym(c, result))
|
||||
else:
|
||||
result.typ = makeTypeDesc(c, typ)
|
||||
#result = symNodeFromType(c, typ, n.info)
|
||||
else:
|
||||
|
|
|
|||
8
tests/macros/t7454.nim
Normal file
8
tests/macros/t7454.nim
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
discard """
|
||||
errormsg: "expression has no type:"
|
||||
line: 8
|
||||
"""
|
||||
|
||||
macro p(t: typedesc): typedesc =
|
||||
discard
|
||||
var a: p(int)
|
||||
Loading…
Add table
Add a link
Reference in a new issue