Skip to content
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

Open
jcosborn opened this issue Mar 9, 2023 · 4 comments
Open

getAst fails with template argument of type set #21498

jcosborn opened this issue Mar 9, 2023 · 4 comments

Comments

@jcosborn
Copy link
Contributor

jcosborn commented Mar 9, 2023

Description

Using getAst on a template with an argument of type set gives an error depending on how the template parameter is declared.
getastset.nim

import macros

type
  Foo = enum
    A, B, C
  FooSet = set[Foo]

template ast0(x: untyped) =
  if A in x: echo "A"
template ast1(x: typed) =
  if A in x: echo "A"
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"

ast0({A})
ast1({A})
ast2({A})
ast3({A})
ast4({A})

macro test0(x: static FooSet): auto =
  let y = newLit x
  result = getAst(ast0(y))
macro test1(x: static FooSet): auto =
  let y = newLit x
  result = getAst(ast1(y))
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))
macro test5(x: static FooSet): auto =
  let y = newLit x
  result = quote do:
    if A in `y`: echo "A"

test0({A})
test1({A})
test2({A}) # Error: {} must have the set type
test3({A}) # Error: internal error: expr(skType); unknown symbol
test4({A}) # Error: {} must have the set type
test5({A})

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

getastset.nim(47, 6) template/generic instantiation of `test2` from here
getastset.nim(33, 23) Error: {} must have the set type

Expected Output

should compile

Possible Solution

No response

Additional Information

No response

@ringabout
Copy link
Member

ringabout commented Mar 10, 2023

case 2 and case 4 don't work at 1.6.10 either. I push a small fix later.

@ringabout
Copy link
Member

ringabout commented Mar 10, 2023

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 github-actions bot added the stale Staled PR/issues; remove the label after fixing them label Jun 1, 2023
@ringabout ringabout removed the stale Staled PR/issues; remove the label after fixing them label Jun 9, 2023
@juancarlospaco
Copy link
Collaborator

!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})

@github-actions
Copy link
Contributor

github-actions bot commented Jul 7, 2023

@juancarlospaco (contributor)

devel :-1: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off  --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(19, 6) template/generic instantiation of `test2` from here
/home/runner/work/Nim/Nim/temp.nim(12, 23) Error: {} must have the set type

Stats

  • Created 2023-07-07T02:30:07Z
  • Started 2023-07-07T02:30:40
  • Finished 2023-07-07T02:30:41
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

AST

nnkStmtList.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: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off  --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(19, 6) template/generic instantiation of `test2` from here
/home/runner/work/Nim/Nim/temp.nim(12, 23) Error: wrong number of arguments

Stats

  • Created 2023-07-07T02:30:07Z
  • Started 2023-07-07T02:30:41
  • Finished 2023-07-07T02:30:42
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

AST

nnkStmtList.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: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off  --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(19, 6) template/generic instantiation of `test2` from here
/home/runner/work/Nim/Nim/temp.nim(12, 23) Error: wrong number of arguments

Stats

  • Created 2023-07-07T02:30:07Z
  • Started 2023-07-07T02:30:44
  • Finished 2023-07-07T02:30:45
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

AST

nnkStmtList.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: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off  --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(19, 6) template/generic instantiation of `test2` from here
/home/runner/work/Nim/Nim/temp.nim(12, 23) Error: wrong number of arguments

Stats

  • Created 2023-07-07T02:30:07Z
  • Started 2023-07-07T02:30:48
  • Finished 2023-07-07T02:30:48
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

AST

nnkStmtList.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: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off  --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(19, 6) template/generic instantiation of `test2` from here
/home/runner/work/Nim/Nim/temp.nim(12, 23) Error: wrong number of arguments

Stats

  • Created 2023-07-07T02:30:07Z
  • Started 2023-07-07T02:31:03
  • Finished 2023-07-07T02:31:03
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

AST

nnkStmtList.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: FAIL

Output

Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off  --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(19, 6) template/generic instantiation of `test2` from here
/home/runner/work/Nim/Nim/temp.nim(12, 23) Error: wrong number of arguments

Stats

  • Created 2023-07-07T02:30:07Z
  • Started 2023-07-07T02:31:16
  • Finished 2023-07-07T02:31:16
  • Duration now
  • Commands nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

IR

AST

nnkStmtList.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")
    )
  )
)
🤖 Bug found in 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
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants