mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-21 00:11:26 +00:00
Fix astdef typ deref (#10245)
This commit is contained in:
committed by
Andreas Rumpf
parent
3a5a0f6d46
commit
f101f09256
@@ -336,7 +336,7 @@ proc checkNilable(c: PContext; v: PSym) =
|
||||
{tfNotNil, tfNeedsInit} * v.typ.flags != {}:
|
||||
if v.astdef.isNil:
|
||||
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)
|
||||
|
||||
#include liftdestructors
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
{.experimental: "notnil".}
|
||||
|
||||
import macros
|
||||
|
||||
block:
|
||||
@@ -11,8 +13,10 @@ block:
|
||||
block:
|
||||
template myAttr(a: string) {.pragma.}
|
||||
|
||||
type MyObj = object
|
||||
myField1, myField2 {.myAttr: "hi".}: int
|
||||
type
|
||||
MyObj = object
|
||||
myField1, myField2 {.myAttr: "hi".}: int
|
||||
|
||||
var o: MyObj
|
||||
static:
|
||||
assert o.myField2.hasCustomPragma(myAttr)
|
||||
@@ -206,11 +210,16 @@ block:
|
||||
template myAttr2(x: int) {.pragma.}
|
||||
template myAttr3(x: string) {.pragma.}
|
||||
|
||||
type
|
||||
MyObj2 = ref object
|
||||
MyObjNotNil = MyObj2 not nil
|
||||
|
||||
let a {.myAttr,myAttr2(2),myAttr3:"test".}: int = 0
|
||||
let b {.myAttr,myAttr2(2),myAttr3:"test".} = 0
|
||||
var x {.myAttr,myAttr2(2),myAttr3:"test".}: int = 0
|
||||
var y {.myAttr,myAttr2(2),myAttr3:"test".}: int
|
||||
var z {.myAttr,myAttr2(2),myAttr3:"test".} = 0
|
||||
var z2 {.myAttr.}: MyObjNotNil
|
||||
|
||||
template check(s: untyped) =
|
||||
doAssert s.hasCustomPragma(myAttr)
|
||||
|
||||
Reference in New Issue
Block a user