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

Errors when initializing a const with a proc returning a tuple. #21321

Open
AmjadHD opened this issue Feb 1, 2023 · 3 comments
Open

Errors when initializing a const with a proc returning a tuple. #21321

AmjadHD opened this issue Feb 1, 2023 · 3 comments
Labels
const `const x=expr` or `static: stmt` works_but_needs_test_case

Comments

@AmjadHD
Copy link
Contributor

AmjadHD commented Feb 1, 2023

Description

This works fine:

type
  Rect = tuple
    x, y, w, h: cint

proc rect(x, y: cint; w = cint(0), h = cint(0)): Rect =
  result.x = x
  result.y = y
  result.w = w
  result.h = h

template centerx(rect: Rect): cint = rect.x + rect.w div 2

let r = rect(0, 0, 20, 20)
var rr: Rect

rr.x = r.centerx

While just replacing let by const triggers these errors:

   16:9   hint    template/generic instantiation from here ​nimsuggest chk
   11:42  error   undeclared field: 'x' ​nimsuggest chk
   16:9   hint    template/generic instantiation from here ​nimsuggest chk
   11:42  error   undeclared field: '.' ​nimsuggest chk
   16:9   hint    template/generic instantiation from here ​nimsuggest chk
   11:42  error   undeclared field: '.' ​nimsuggest chk
   16:9   hint    template/generic instantiation from here ​nimsuggest chk
   11:51  error   undeclared field: 'w' ​nimsuggest chk
   16:9   hint    template/generic instantiation from here ​nimsuggest chk
   11:51  error   undeclared field: '.' ​nimsuggest chk
   16:9   hint    template/generic instantiation from here ​nimsuggest chk
   11:51  error   undeclared field: '.' ​nimsuggest chk
   16:9   error   type mismatch: got 'int' for ' + div 2' but expected 'cint = int32' ​nimsuggest chk

image
changing to const r: Rect = (x: 0, y: 0, w: 20, h: 20) and the compiler no longer complains.

Nim Version

1.9.1 705da9d

Current Output

No response

Expected Output

No response

Possible Solution

No response

Additional Information

No response

@juancarlospaco
Copy link
Collaborator

!nim c

type Rect = tuple
  x, y, w, h: cint
proc rect(x, y: cint; w = cint(0), h = cint(0)): Rect =
  result.x = x
  result.y = y
  result.w = w
  result.h = h
template centerx(rect: Rect): cint = rect.x + rect.w div 2
const r = rect(0, 0, 20, 20)
var rr: Rect
rr.x = r.centerx

@github-actions
Copy link
Contributor

github-actions bot commented Jul 9, 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(11, 9) template/generic instantiation of `centerx` from here
/home/runner/work/Nim/Nim/temp.nim(8, 42) Error: undeclared field: 'x'

Stats

  • Created 2023-07-09T15:26:10Z
  • Started 2023-07-09T15:26:48
  • Finished 2023-07-09T15:26: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(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Rect"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("x"),
          newIdentNode("y"),
          newIdentNode("w"),
          newIdentNode("h"),
          newIdentNode("cint"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("rect"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Rect"),
      nnkIdentDefs.newTree(
        newIdentNode("x"),
        newIdentNode("y"),
        newIdentNode("cint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("w"),
        newEmptyNode(),
        nnkCall.newTree(
          newIdentNode("cint"),
          newLit(0)
        )
      ),
      nnkIdentDefs.newTree(
        newIdentNode("h"),
        newEmptyNode(),
        nnkCall.newTree(
          newIdentNode("cint"),
          newLit(0)
        )
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("x")
        ),
        newIdentNode("x")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("y")
        ),
        newIdentNode("y")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("w")
        ),
        newIdentNode("w")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("h")
        ),
        newIdentNode("h")
      )
    )
  ),
  nnkTemplateDef.newTree(
    newIdentNode("centerx"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("cint"),
      nnkIdentDefs.newTree(
        newIdentNode("rect"),
        newIdentNode("Rect"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkInfix.newTree(
        newIdentNode("+"),
        nnkDotExpr.newTree(
          newIdentNode("rect"),
          newIdentNode("x")
        ),
        nnkInfix.newTree(
          newIdentNode("div"),
          nnkDotExpr.newTree(
            newIdentNode("rect"),
            newIdentNode("w")
          ),
          newLit(2)
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("r"),
      newEmptyNode(),
      nnkCall.newTree(
        newIdentNode("rect"),
        newLit(0),
        newLit(0),
        newLit(20),
        newLit(20)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("rr"),
      newIdentNode("Rect"),
      newEmptyNode()
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("rr"),
      newIdentNode("x")
    ),
    nnkDotExpr.newTree(
      newIdentNode("r"),
      newIdentNode("centerx")
    )
  )
)
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(11, 9) template/generic instantiation of `centerx` from here
/home/runner/work/Nim/Nim/temp.nim(8, 42) Error: undeclared field: 'x'

Stats

  • Created 2023-07-09T15:26:10Z
  • Started 2023-07-09T15:26:49
  • Finished 2023-07-09T15:26:49
  • 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(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Rect"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("x"),
          newIdentNode("y"),
          newIdentNode("w"),
          newIdentNode("h"),
          newIdentNode("cint"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("rect"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Rect"),
      nnkIdentDefs.newTree(
        newIdentNode("x"),
        newIdentNode("y"),
        newIdentNode("cint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("w"),
        newEmptyNode(),
        nnkCall.newTree(
          newIdentNode("cint"),
          newLit(0)
        )
      ),
      nnkIdentDefs.newTree(
        newIdentNode("h"),
        newEmptyNode(),
        nnkCall.newTree(
          newIdentNode("cint"),
          newLit(0)
        )
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("x")
        ),
        newIdentNode("x")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("y")
        ),
        newIdentNode("y")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("w")
        ),
        newIdentNode("w")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("h")
        ),
        newIdentNode("h")
      )
    )
  ),
  nnkTemplateDef.newTree(
    newIdentNode("centerx"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("cint"),
      nnkIdentDefs.newTree(
        newIdentNode("rect"),
        newIdentNode("Rect"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkInfix.newTree(
        newIdentNode("+"),
        nnkDotExpr.newTree(
          newIdentNode("rect"),
          newIdentNode("x")
        ),
        nnkInfix.newTree(
          newIdentNode("div"),
          nnkDotExpr.newTree(
            newIdentNode("rect"),
            newIdentNode("w")
          ),
          newLit(2)
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("r"),
      newEmptyNode(),
      nnkCall.newTree(
        newIdentNode("rect"),
        newLit(0),
        newLit(0),
        newLit(20),
        newLit(20)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("rr"),
      newIdentNode("Rect"),
      newEmptyNode()
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("rr"),
      newIdentNode("x")
    ),
    nnkDotExpr.newTree(
      newIdentNode("r"),
      newIdentNode("centerx")
    )
  )
)
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(11, 9) template/generic instantiation of `centerx` from here
/home/runner/work/Nim/Nim/temp.nim(8, 42) Error: undeclared field: 'x'

Stats

  • Created 2023-07-09T15:26:10Z
  • Started 2023-07-09T15:26:53
  • Finished 2023-07-09T15:26:53
  • 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(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Rect"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("x"),
          newIdentNode("y"),
          newIdentNode("w"),
          newIdentNode("h"),
          newIdentNode("cint"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("rect"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Rect"),
      nnkIdentDefs.newTree(
        newIdentNode("x"),
        newIdentNode("y"),
        newIdentNode("cint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("w"),
        newEmptyNode(),
        nnkCall.newTree(
          newIdentNode("cint"),
          newLit(0)
        )
      ),
      nnkIdentDefs.newTree(
        newIdentNode("h"),
        newEmptyNode(),
        nnkCall.newTree(
          newIdentNode("cint"),
          newLit(0)
        )
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("x")
        ),
        newIdentNode("x")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("y")
        ),
        newIdentNode("y")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("w")
        ),
        newIdentNode("w")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("h")
        ),
        newIdentNode("h")
      )
    )
  ),
  nnkTemplateDef.newTree(
    newIdentNode("centerx"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("cint"),
      nnkIdentDefs.newTree(
        newIdentNode("rect"),
        newIdentNode("Rect"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkInfix.newTree(
        newIdentNode("+"),
        nnkDotExpr.newTree(
          newIdentNode("rect"),
          newIdentNode("x")
        ),
        nnkInfix.newTree(
          newIdentNode("div"),
          nnkDotExpr.newTree(
            newIdentNode("rect"),
            newIdentNode("w")
          ),
          newLit(2)
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("r"),
      newEmptyNode(),
      nnkCall.newTree(
        newIdentNode("rect"),
        newLit(0),
        newLit(0),
        newLit(20),
        newLit(20)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("rr"),
      newIdentNode("Rect"),
      newEmptyNode()
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("rr"),
      newIdentNode("x")
    ),
    nnkDotExpr.newTree(
      newIdentNode("r"),
      newIdentNode("centerx")
    )
  )
)
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(11, 9) template/generic instantiation of `centerx` from here
/home/runner/work/Nim/Nim/temp.nim(8, 42) Error: undeclared field: 'x' 

Stats

  • Created 2023-07-09T15:26:10Z
  • Started 2023-07-09T15:26:56
  • Finished 2023-07-09T15:26:57
  • 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(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Rect"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("x"),
          newIdentNode("y"),
          newIdentNode("w"),
          newIdentNode("h"),
          newIdentNode("cint"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("rect"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Rect"),
      nnkIdentDefs.newTree(
        newIdentNode("x"),
        newIdentNode("y"),
        newIdentNode("cint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("w"),
        newEmptyNode(),
        nnkCall.newTree(
          newIdentNode("cint"),
          newLit(0)
        )
      ),
      nnkIdentDefs.newTree(
        newIdentNode("h"),
        newEmptyNode(),
        nnkCall.newTree(
          newIdentNode("cint"),
          newLit(0)
        )
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("x")
        ),
        newIdentNode("x")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("y")
        ),
        newIdentNode("y")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("w")
        ),
        newIdentNode("w")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("h")
        ),
        newIdentNode("h")
      )
    )
  ),
  nnkTemplateDef.newTree(
    newIdentNode("centerx"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("cint"),
      nnkIdentDefs.newTree(
        newIdentNode("rect"),
        newIdentNode("Rect"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkInfix.newTree(
        newIdentNode("+"),
        nnkDotExpr.newTree(
          newIdentNode("rect"),
          newIdentNode("x")
        ),
        nnkInfix.newTree(
          newIdentNode("div"),
          nnkDotExpr.newTree(
            newIdentNode("rect"),
            newIdentNode("w")
          ),
          newLit(2)
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("r"),
      newEmptyNode(),
      nnkCall.newTree(
        newIdentNode("rect"),
        newLit(0),
        newLit(0),
        newLit(20),
        newLit(20)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("rr"),
      newIdentNode("Rect"),
      newEmptyNode()
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("rr"),
      newIdentNode("x")
    ),
    nnkDotExpr.newTree(
      newIdentNode("r"),
      newIdentNode("centerx")
    )
  )
)
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(11, 9) template/generic instantiation of `centerx` from here
/home/runner/work/Nim/Nim/temp.nim(8, 42) Error: undeclared field: 'x' 

Stats

  • Created 2023-07-09T15:26:10Z
  • Started 2023-07-09T15:27:15
  • Finished 2023-07-09T15:27:15
  • 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(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Rect"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("x"),
          newIdentNode("y"),
          newIdentNode("w"),
          newIdentNode("h"),
          newIdentNode("cint"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("rect"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Rect"),
      nnkIdentDefs.newTree(
        newIdentNode("x"),
        newIdentNode("y"),
        newIdentNode("cint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("w"),
        newEmptyNode(),
        nnkCall.newTree(
          newIdentNode("cint"),
          newLit(0)
        )
      ),
      nnkIdentDefs.newTree(
        newIdentNode("h"),
        newEmptyNode(),
        nnkCall.newTree(
          newIdentNode("cint"),
          newLit(0)
        )
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("x")
        ),
        newIdentNode("x")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("y")
        ),
        newIdentNode("y")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("w")
        ),
        newIdentNode("w")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("h")
        ),
        newIdentNode("h")
      )
    )
  ),
  nnkTemplateDef.newTree(
    newIdentNode("centerx"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("cint"),
      nnkIdentDefs.newTree(
        newIdentNode("rect"),
        newIdentNode("Rect"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkInfix.newTree(
        newIdentNode("+"),
        nnkDotExpr.newTree(
          newIdentNode("rect"),
          newIdentNode("x")
        ),
        nnkInfix.newTree(
          newIdentNode("div"),
          nnkDotExpr.newTree(
            newIdentNode("rect"),
            newIdentNode("w")
          ),
          newLit(2)
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("r"),
      newEmptyNode(),
      nnkCall.newTree(
        newIdentNode("rect"),
        newLit(0),
        newLit(0),
        newLit(20),
        newLit(20)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("rr"),
      newIdentNode("Rect"),
      newEmptyNode()
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("rr"),
      newIdentNode("x")
    ),
    nnkDotExpr.newTree(
      newIdentNode("r"),
      newIdentNode("centerx")
    )
  )
)
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(11, 9) template/generic instantiation of `centerx` from here
/home/runner/work/Nim/Nim/temp.nim(8, 42) Error: undeclared field: 'x' 

Stats

  • Created 2023-07-09T15:26:10Z
  • Started 2023-07-09T15:27:29
  • Finished 2023-07-09T15:27:29
  • 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(
  nnkTypeSection.newTree(
    nnkTypeDef.newTree(
      newIdentNode("Rect"),
      newEmptyNode(),
      nnkTupleTy.newTree(
        nnkIdentDefs.newTree(
          newIdentNode("x"),
          newIdentNode("y"),
          newIdentNode("w"),
          newIdentNode("h"),
          newIdentNode("cint"),
          newEmptyNode()
        )
      )
    )
  ),
  nnkProcDef.newTree(
    newIdentNode("rect"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("Rect"),
      nnkIdentDefs.newTree(
        newIdentNode("x"),
        newIdentNode("y"),
        newIdentNode("cint"),
        newEmptyNode()
      ),
      nnkIdentDefs.newTree(
        newIdentNode("w"),
        newEmptyNode(),
        nnkCall.newTree(
          newIdentNode("cint"),
          newLit(0)
        )
      ),
      nnkIdentDefs.newTree(
        newIdentNode("h"),
        newEmptyNode(),
        nnkCall.newTree(
          newIdentNode("cint"),
          newLit(0)
        )
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("x")
        ),
        newIdentNode("x")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("y")
        ),
        newIdentNode("y")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("w")
        ),
        newIdentNode("w")
      ),
      nnkAsgn.newTree(
        nnkDotExpr.newTree(
          newIdentNode("result"),
          newIdentNode("h")
        ),
        newIdentNode("h")
      )
    )
  ),
  nnkTemplateDef.newTree(
    newIdentNode("centerx"),
    newEmptyNode(),
    newEmptyNode(),
    nnkFormalParams.newTree(
      newIdentNode("cint"),
      nnkIdentDefs.newTree(
        newIdentNode("rect"),
        newIdentNode("Rect"),
        newEmptyNode()
      )
    ),
    newEmptyNode(),
    newEmptyNode(),
    nnkStmtList.newTree(
      nnkInfix.newTree(
        newIdentNode("+"),
        nnkDotExpr.newTree(
          newIdentNode("rect"),
          newIdentNode("x")
        ),
        nnkInfix.newTree(
          newIdentNode("div"),
          nnkDotExpr.newTree(
            newIdentNode("rect"),
            newIdentNode("w")
          ),
          newLit(2)
        )
      )
    )
  ),
  nnkConstSection.newTree(
    nnkConstDef.newTree(
      newIdentNode("r"),
      newEmptyNode(),
      nnkCall.newTree(
        newIdentNode("rect"),
        newLit(0),
        newLit(0),
        newLit(20),
        newLit(20)
      )
    )
  ),
  nnkVarSection.newTree(
    nnkIdentDefs.newTree(
      newIdentNode("rr"),
      newIdentNode("Rect"),
      newEmptyNode()
    )
  ),
  nnkAsgn.newTree(
    nnkDotExpr.newTree(
      newIdentNode("rr"),
      newIdentNode("x")
    ),
    nnkDotExpr.newTree(
      newIdentNode("r"),
      newIdentNode("centerx")
    )
  )
)
🤖 Bug found in 45 minutes bisecting 6 commits at 0 commits per second.

@metagn
Copy link
Collaborator

metagn commented Oct 14, 2024

Seems like the tuple loses all type information

Works in devel but not 2.2

@metagn metagn added const `const x=expr` or `static: stmt` works_but_needs_test_case labels Oct 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
const `const x=expr` or `static: stmt` works_but_needs_test_case
Projects
None yet
Development

No branches or pull requests

3 participants