Fix astdef typ deref (#10245)
This commit is contained in:
parent
3a5a0f6d46
commit
f101f09256
2 changed files with 12 additions and 3 deletions
|
|
@ -336,7 +336,7 @@ proc checkNilable(c: PContext; v: PSym) =
|
||||||
{tfNotNil, tfNeedsInit} * v.typ.flags != {}:
|
{tfNotNil, tfNeedsInit} * v.typ.flags != {}:
|
||||||
if v.astdef.isNil:
|
if v.astdef.isNil:
|
||||||
message(c.config, v.info, warnProveInit, v.name.s)
|
message(c.config, v.info, warnProveInit, v.name.s)
|
||||||
elif tfNotNil in v.typ.flags and tfNotNil notin v.astdef.typ.flags:
|
elif tfNotNil in v.typ.flags and not v.astdef.typ.isNil and tfNotNil notin v.astdef.typ.flags:
|
||||||
message(c.config, v.info, warnProveInit, v.name.s)
|
message(c.config, v.info, warnProveInit, v.name.s)
|
||||||
|
|
||||||
#include liftdestructors
|
#include liftdestructors
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
{.experimental: "notnil".}
|
||||||
|
|
||||||
import macros
|
import macros
|
||||||
|
|
||||||
block:
|
block:
|
||||||
|
|
@ -11,8 +13,10 @@ block:
|
||||||
block:
|
block:
|
||||||
template myAttr(a: string) {.pragma.}
|
template myAttr(a: string) {.pragma.}
|
||||||
|
|
||||||
type MyObj = object
|
type
|
||||||
myField1, myField2 {.myAttr: "hi".}: int
|
MyObj = object
|
||||||
|
myField1, myField2 {.myAttr: "hi".}: int
|
||||||
|
|
||||||
var o: MyObj
|
var o: MyObj
|
||||||
static:
|
static:
|
||||||
assert o.myField2.hasCustomPragma(myAttr)
|
assert o.myField2.hasCustomPragma(myAttr)
|
||||||
|
|
@ -206,11 +210,16 @@ block:
|
||||||
template myAttr2(x: int) {.pragma.}
|
template myAttr2(x: int) {.pragma.}
|
||||||
template myAttr3(x: string) {.pragma.}
|
template myAttr3(x: string) {.pragma.}
|
||||||
|
|
||||||
|
type
|
||||||
|
MyObj2 = ref object
|
||||||
|
MyObjNotNil = MyObj2 not nil
|
||||||
|
|
||||||
let a {.myAttr,myAttr2(2),myAttr3:"test".}: int = 0
|
let a {.myAttr,myAttr2(2),myAttr3:"test".}: int = 0
|
||||||
let b {.myAttr,myAttr2(2),myAttr3:"test".} = 0
|
let b {.myAttr,myAttr2(2),myAttr3:"test".} = 0
|
||||||
var x {.myAttr,myAttr2(2),myAttr3:"test".}: int = 0
|
var x {.myAttr,myAttr2(2),myAttr3:"test".}: int = 0
|
||||||
var y {.myAttr,myAttr2(2),myAttr3:"test".}: int
|
var y {.myAttr,myAttr2(2),myAttr3:"test".}: int
|
||||||
var z {.myAttr,myAttr2(2),myAttr3:"test".} = 0
|
var z {.myAttr,myAttr2(2),myAttr3:"test".} = 0
|
||||||
|
var z2 {.myAttr.}: MyObjNotNil
|
||||||
|
|
||||||
template check(s: untyped) =
|
template check(s: untyped) =
|
||||||
doAssert s.hasCustomPragma(myAttr)
|
doAssert s.hasCustomPragma(myAttr)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue