-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
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
Labels
Comments
!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 |
@juancarlospaco (contributor) devel :-1: FAILOutput
Stats
IRASTnnkStmtList.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: FAILOutput
Stats
IRASTnnkStmtList.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: FAILOutput
Stats
IRASTnnkStmtList.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: FAILOutput
Stats
IRASTnnkStmtList.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: FAILOutput
Stats
IRASTnnkStmtList.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: FAILOutput
Stats
IRASTnnkStmtList.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")
)
)
) 45 minutes bisecting 6 commits at 0 commits per second.
|
Works in devel but not 2.2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Description
This works fine:
While just replacing
let
byconst
triggers these errors: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
The text was updated successfully, but these errors were encountered: