New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
getAst fails with template argument of type set #21498
Comments
case 2 and case 4 don't work at 1.6.10 either. I push a small fix later. |
The root cause of case 3 is that the conversion is lost after the VM evaluation. {
"kind": "nkCurly",
"flags": ["nfIsRef"],
"typ": "tySet",
"sons": [{
"kind": "nkCall",
"flags": ["nfIsRef"],
"typ": "nil",
"sons": [{
"kind": "nkSym",
"typ": "tyEnum",
"sym": {
"kind": "skType",
"name": "Foo",
"id": 520093698,
"flags": ["sfUsed", "sfGlobal"]
}
}, {
"kind": "nkIntLit",
"flags": ["nfIsRef"],
"typ": "nil",
"intVal": 0
}]
}]
} It happened to work before. One solution is to restore nkConv in the semmacrosanity of nkCallKinds:
if n[0].kind == nkSym and n[0].sym.kind == skType:
doAssert n.len == 2
n[] = n[1][]
n.typ = t |
github-actions
bot
added
the
stale
Staled PR/issues; remove the label after fixing them
label
Jun 1, 2023
!nim c import macros
type Foo = enum A, B, C
type FooSet = set[Foo]
template ast2(x: auto) = (if A in x: echo "A")
template ast3(x: FooSet) = (if A in x: echo "A")
template ast4(x: static FooSet) = (if A in x: echo "A")
ast2({A})
ast3({A})
ast4({A})
macro test2(x: static FooSet): auto =
let y = newLit(x)
result = getAst(ast2(y))
macro test3(x: static FooSet): auto =
let y = newLit(x)
result = getAst(ast3(y))
macro test4(x: static FooSet): auto =
let y = newLit(x)
result = getAst(ast4(y))
test2({A})
test3({A})
test4({A}) |
@juancarlospaco (contributor) devel :-1: FAILOutput
Stats
IRASTnnkStmtList.newTree(
nnkImportStmt.newTree(
newIdentNode("macros")
),
nnkTypeSection.newTree(
nnkTypeDef.newTree(
newIdentNode("Foo"),
newEmptyNode(),
nnkEnumTy.newTree(
newEmptyNode(),
newIdentNode("A"),
newIdentNode("B"),
newIdentNode("C")
)
)
),
nnkTypeSection.newTree(
nnkTypeDef.newTree(
newIdentNode("FooSet"),
newEmptyNode(),
nnkBracketExpr.newTree(
newIdentNode("set"),
newIdentNode("Foo")
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast2"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("auto"),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifExpr.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast3"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("FooSet"),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifExpr.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast4"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifExpr.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkCall.newTree(
newIdentNode("ast2"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("ast3"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("ast4"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkMacroDef.newTree(
newIdentNode("test2"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast2"),
newIdentNode("y")
)
)
)
)
),
nnkMacroDef.newTree(
newIdentNode("test3"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast3"),
newIdentNode("y")
)
)
)
)
),
nnkMacroDef.newTree(
newIdentNode("test4"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast4"),
newIdentNode("y")
)
)
)
)
),
nnkCall.newTree(
newIdentNode("test2"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("test3"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("test4"),
nnkCurly.newTree(
newIdentNode("A")
)
)
) stable :-1: FAILOutput
Stats
IRASTnnkStmtList.newTree(
nnkImportStmt.newTree(
newIdentNode("macros")
),
nnkTypeSection.newTree(
nnkTypeDef.newTree(
newIdentNode("Foo"),
newEmptyNode(),
nnkEnumTy.newTree(
newEmptyNode(),
newIdentNode("A"),
newIdentNode("B"),
newIdentNode("C")
)
)
),
nnkTypeSection.newTree(
nnkTypeDef.newTree(
newIdentNode("FooSet"),
newEmptyNode(),
nnkBracketExpr.newTree(
newIdentNode("set"),
newIdentNode("Foo")
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast2"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("auto"),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifExpr.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast3"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("FooSet"),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifExpr.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast4"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifExpr.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkCall.newTree(
newIdentNode("ast2"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("ast3"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("ast4"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkMacroDef.newTree(
newIdentNode("test2"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast2"),
newIdentNode("y")
)
)
)
)
),
nnkMacroDef.newTree(
newIdentNode("test3"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast3"),
newIdentNode("y")
)
)
)
)
),
nnkMacroDef.newTree(
newIdentNode("test4"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast4"),
newIdentNode("y")
)
)
)
)
),
nnkCall.newTree(
newIdentNode("test2"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("test3"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("test4"),
nnkCurly.newTree(
newIdentNode("A")
)
)
) 1.6.0 :-1: FAILOutput
Stats
IRASTnnkStmtList.newTree(
nnkImportStmt.newTree(
newIdentNode("macros")
),
nnkTypeSection.newTree(
nnkTypeDef.newTree(
newIdentNode("Foo"),
newEmptyNode(),
nnkEnumTy.newTree(
newEmptyNode(),
newIdentNode("A"),
newIdentNode("B"),
newIdentNode("C")
)
)
),
nnkTypeSection.newTree(
nnkTypeDef.newTree(
newIdentNode("FooSet"),
newEmptyNode(),
nnkBracketExpr.newTree(
newIdentNode("set"),
newIdentNode("Foo")
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast2"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("auto"),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifExpr.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast3"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("FooSet"),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifExpr.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast4"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifExpr.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkCall.newTree(
newIdentNode("ast2"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("ast3"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("ast4"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkMacroDef.newTree(
newIdentNode("test2"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast2"),
newIdentNode("y")
)
)
)
)
),
nnkMacroDef.newTree(
newIdentNode("test3"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast3"),
newIdentNode("y")
)
)
)
)
),
nnkMacroDef.newTree(
newIdentNode("test4"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast4"),
newIdentNode("y")
)
)
)
)
),
nnkCall.newTree(
newIdentNode("test2"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("test3"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("test4"),
nnkCurly.newTree(
newIdentNode("A")
)
)
) 1.4.0 :-1: FAILOutput
Stats
IRASTnnkStmtList.newTree(
nnkImportStmt.newTree(
newIdentNode("macros")
),
nnkTypeSection.newTree(
nnkTypeDef.newTree(
newIdentNode("Foo"),
newEmptyNode(),
nnkEnumTy.newTree(
newEmptyNode(),
newIdentNode("A"),
newIdentNode("B"),
newIdentNode("C")
)
)
),
nnkTypeSection.newTree(
nnkTypeDef.newTree(
newIdentNode("FooSet"),
newEmptyNode(),
nnkBracketExpr.newTree(
newIdentNode("set"),
newIdentNode("Foo")
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast2"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("auto"),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifExpr.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast3"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("FooSet"),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifExpr.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast4"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifExpr.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkCall.newTree(
newIdentNode("ast2"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("ast3"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("ast4"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkMacroDef.newTree(
newIdentNode("test2"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast2"),
newIdentNode("y")
)
)
)
)
),
nnkMacroDef.newTree(
newIdentNode("test3"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast3"),
newIdentNode("y")
)
)
)
)
),
nnkMacroDef.newTree(
newIdentNode("test4"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast4"),
newIdentNode("y")
)
)
)
)
),
nnkCall.newTree(
newIdentNode("test2"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("test3"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("test4"),
nnkCurly.newTree(
newIdentNode("A")
)
)
) 1.2.0 :-1: FAILOutput
Stats
IRASTnnkStmtList.newTree(
nnkImportStmt.newTree(
newIdentNode("macros")
),
nnkTypeSection.newTree(
nnkTypeDef.newTree(
newIdentNode("Foo"),
newEmptyNode(),
nnkEnumTy.newTree(
newEmptyNode(),
newIdentNode("A"),
newIdentNode("B"),
newIdentNode("C")
)
)
),
nnkTypeSection.newTree(
nnkTypeDef.newTree(
newIdentNode("FooSet"),
newEmptyNode(),
nnkBracketExpr.newTree(
newIdentNode("set"),
newIdentNode("Foo")
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast2"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("auto"),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifBranch.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast3"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("FooSet"),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifBranch.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast4"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifBranch.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkCall.newTree(
newIdentNode("ast2"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("ast3"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("ast4"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkMacroDef.newTree(
newIdentNode("test2"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast2"),
newIdentNode("y")
)
)
)
)
),
nnkMacroDef.newTree(
newIdentNode("test3"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast3"),
newIdentNode("y")
)
)
)
)
),
nnkMacroDef.newTree(
newIdentNode("test4"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast4"),
newIdentNode("y")
)
)
)
)
),
nnkCall.newTree(
newIdentNode("test2"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("test3"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("test4"),
nnkCurly.newTree(
newIdentNode("A")
)
)
) 1.0.0 :-1: FAILOutput
Stats
IRASTnnkStmtList.newTree(
nnkImportStmt.newTree(
newIdentNode("macros")
),
nnkTypeSection.newTree(
nnkTypeDef.newTree(
newIdentNode("Foo"),
newEmptyNode(),
nnkEnumTy.newTree(
newEmptyNode(),
newIdentNode("A"),
newIdentNode("B"),
newIdentNode("C")
)
)
),
nnkTypeSection.newTree(
nnkTypeDef.newTree(
newIdentNode("FooSet"),
newEmptyNode(),
nnkBracketExpr.newTree(
newIdentNode("set"),
newIdentNode("Foo")
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast2"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("auto"),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifBranch.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast3"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
newIdentNode("FooSet"),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifBranch.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkTemplateDef.newTree(
newIdentNode("ast4"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newEmptyNode(),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkStmtListExpr.newTree(
nnkIfStmt.newTree(
nnkElifBranch.newTree(
nnkInfix.newTree(
newIdentNode("in"),
newIdentNode("A"),
newIdentNode("x")
),
nnkCommand.newTree(
newIdentNode("echo"),
newLit("A")
)
)
)
)
)
),
nnkCall.newTree(
newIdentNode("ast2"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("ast3"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("ast4"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkMacroDef.newTree(
newIdentNode("test2"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast2"),
newIdentNode("y")
)
)
)
)
),
nnkMacroDef.newTree(
newIdentNode("test3"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast3"),
newIdentNode("y")
)
)
)
)
),
nnkMacroDef.newTree(
newIdentNode("test4"),
newEmptyNode(),
newEmptyNode(),
nnkFormalParams.newTree(
newIdentNode("auto"),
nnkIdentDefs.newTree(
newIdentNode("x"),
nnkCommand.newTree(
newIdentNode("static"),
newIdentNode("FooSet")
),
newEmptyNode()
)
),
newEmptyNode(),
newEmptyNode(),
nnkStmtList.newTree(
nnkLetSection.newTree(
nnkIdentDefs.newTree(
newIdentNode("y"),
newEmptyNode(),
nnkCall.newTree(
newIdentNode("newLit"),
newIdentNode("x")
)
)
),
nnkAsgn.newTree(
newIdentNode("result"),
nnkCall.newTree(
newIdentNode("getAst"),
nnkCall.newTree(
newIdentNode("ast4"),
newIdentNode("y")
)
)
)
)
),
nnkCall.newTree(
newIdentNode("test2"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("test3"),
nnkCurly.newTree(
newIdentNode("A")
)
),
nnkCall.newTree(
newIdentNode("test4"),
nnkCurly.newTree(
newIdentNode("A")
)
)
) 39 minutes bisecting 6 commits at 0 commits per second.
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Description
Using
getAst
on a template with an argument of typeset
gives an error depending on how the template parameter is declared.getastset.nim
Nim Version
Nim Compiler Version 1.9.1 [Linux: amd64]
Compiled at 2023-03-09
Copyright (c) 2006-2023 by Andreas Rumpf
git hash: 72e2626
active boot switches: -d:release
Current Output
Expected Output
Possible Solution
No response
Additional Information
No response
The text was updated successfully, but these errors were encountered: