* don't sem const objectConstr defaults * fixes * add `efSkipFieldVisibilityCheck`; fixes nkBracket types * fixes #20681 * fixes tests * suggestion from @metagn * fixes tests Co-authored-by: xflywind <43030857+xflywind@users.noreply.github.com>
This commit is contained in:
parent
779b1cc5be
commit
141abb7b75
7 changed files with 50 additions and 47 deletions
|
|
@ -76,7 +76,8 @@ proc semConstrField(c: PContext, flags: TExprFlags,
|
|||
let assignment = locateFieldInInitExpr(c, field, initExpr)
|
||||
if assignment != nil:
|
||||
if nfSem in assignment.flags: return assignment[1]
|
||||
if nfUseDefaultField in assignment[1].flags:
|
||||
if nfUseDefaultField in assignment[1].flags or
|
||||
efSkipFieldVisibilityCheck in flags:
|
||||
discard
|
||||
elif not fieldVisible(c, field):
|
||||
localError(c.config, initExpr.info,
|
||||
|
|
@ -415,7 +416,10 @@ proc semObjConstr(c: PContext, n: PNode, flags: TExprFlags; expectedType: PType
|
|||
# field (if this is a case object, initialized fields in two different
|
||||
# branches will be reported as an error):
|
||||
var constrCtx = initConstrContext(t, result)
|
||||
let (initResult, defaults) = semConstructTypeAux(c, constrCtx, flags)
|
||||
let (initResult, defaults) = if nfUseDefaultField in n.flags:
|
||||
semConstructTypeAux(c, constrCtx, flags + {efSkipFieldVisibilityCheck})
|
||||
else:
|
||||
semConstructTypeAux(c, constrCtx, flags)
|
||||
result[0].sons.add defaults
|
||||
var hasError = false # needed to split error detect/report for better msgs
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue