remove implicit let/var default initialization (#20508)
This commit is contained in:
parent
0d23419e68
commit
079363bfc3
2 changed files with 16 additions and 27 deletions
|
|
@ -612,11 +612,6 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode =
|
||||||
var typFlags: TTypeAllowedFlags
|
var typFlags: TTypeAllowedFlags
|
||||||
|
|
||||||
var def: PNode = c.graph.emptyNode
|
var def: PNode = c.graph.emptyNode
|
||||||
if a[^1].kind == nkEmpty and symkind == skVar and a[^2].typ != nil:
|
|
||||||
let field = defaultNodeField(c, a[^2])
|
|
||||||
if field != nil:
|
|
||||||
a[^1] = field
|
|
||||||
field.flags.incl nfUseDefaultField
|
|
||||||
if a[^1].kind != nkEmpty:
|
if a[^1].kind != nkEmpty:
|
||||||
def = semExprWithType(c, a[^1], {}, typ)
|
def = semExprWithType(c, a[^1], {}, typ)
|
||||||
|
|
||||||
|
|
@ -685,12 +680,6 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode =
|
||||||
addToVarSection(c, result, n, a)
|
addToVarSection(c, result, n, a)
|
||||||
continue
|
continue
|
||||||
var v = semIdentDef(c, a[j], symkind, false)
|
var v = semIdentDef(c, a[j], symkind, false)
|
||||||
if a[^1].kind != nkEmpty:
|
|
||||||
if {sfThread, sfNoInit} * v.flags != {} and
|
|
||||||
nfUseDefaultField in a[^1].flags:
|
|
||||||
a[^1] = c.graph.emptyNode
|
|
||||||
def = c.graph.emptyNode
|
|
||||||
a[^1].flags.excl nfUseDefaultField
|
|
||||||
styleCheckDef(c, v)
|
styleCheckDef(c, v)
|
||||||
onDef(a[j].info, v)
|
onDef(a[j].info, v)
|
||||||
if sfGenSym notin v.flags:
|
if sfGenSym notin v.flags:
|
||||||
|
|
|
||||||
|
|
@ -114,8 +114,8 @@ template main {.dirty.} =
|
||||||
r: R
|
r: R
|
||||||
|
|
||||||
var
|
var
|
||||||
rVal: R # Works fine
|
rVal: R = default(R) # Works fine
|
||||||
objVal: Obj
|
objVal = default(Obj)
|
||||||
|
|
||||||
doAssert rVal == 0 # it should be 1
|
doAssert rVal == 0 # it should be 1
|
||||||
doAssert objVal.r == 1
|
doAssert objVal.r == 1
|
||||||
|
|
@ -142,7 +142,7 @@ template main {.dirty.} =
|
||||||
doAssert z.value == 12
|
doAssert z.value == 12
|
||||||
|
|
||||||
block:
|
block:
|
||||||
var base: ObjectBase
|
var base = ObjectBase()
|
||||||
var x: ObjectBaseDistinct = ObjectBaseDistinct(base)
|
var x: ObjectBaseDistinct = ObjectBaseDistinct(base)
|
||||||
doAssert ObjectBase(x).value == 12
|
doAssert ObjectBase(x).value == 12
|
||||||
let y = ObjectBaseDistinct(default(ObjectBase))
|
let y = ObjectBaseDistinct(default(ObjectBase))
|
||||||
|
|
@ -161,7 +161,7 @@ template main {.dirty.} =
|
||||||
doAssert ObjectBase(x.data).value == 12
|
doAssert ObjectBase(x.data).value == 12
|
||||||
|
|
||||||
block:
|
block:
|
||||||
var x: Object
|
var x = Object()
|
||||||
doAssert x.value == 12
|
doAssert x.value == 12
|
||||||
doAssert x.time == 1.2
|
doAssert x.time == 1.2
|
||||||
doAssert x.scale == 1
|
doAssert x.scale == 1
|
||||||
|
|
@ -171,7 +171,7 @@ template main {.dirty.} =
|
||||||
doAssert y.time == 1.2
|
doAssert y.time == 1.2
|
||||||
doAssert y.scale == 1
|
doAssert y.scale == 1
|
||||||
|
|
||||||
var x1, x2, x3: Object
|
var x1, x2, x3 = default(Object)
|
||||||
doAssert x1.value == 12
|
doAssert x1.value == 12
|
||||||
doAssert x1.time == 1.2
|
doAssert x1.time == 1.2
|
||||||
doAssert x1.scale == 1
|
doAssert x1.scale == 1
|
||||||
|
|
@ -187,7 +187,7 @@ template main {.dirty.} =
|
||||||
doAssert x[] == default(Object)
|
doAssert x[] == default(Object)
|
||||||
|
|
||||||
block:
|
block:
|
||||||
var x: Object2
|
var x = default(Object2)
|
||||||
doAssert x.name.value == 12
|
doAssert x.name.value == 12
|
||||||
doAssert x.name.time == 1.2
|
doAssert x.name.time == 1.2
|
||||||
doAssert x.name.scale == 1
|
doAssert x.name.scale == 1
|
||||||
|
|
@ -198,7 +198,7 @@ template main {.dirty.} =
|
||||||
doAssert x[] == default(Object2)
|
doAssert x[] == default(Object2)
|
||||||
|
|
||||||
block:
|
block:
|
||||||
var x: Object3
|
var x = default(Object3) # todo Object3() ?
|
||||||
doAssert x.obj.name.value == 12
|
doAssert x.obj.name.value == 12
|
||||||
doAssert x.obj.name.time == 1.2
|
doAssert x.obj.name.time == 1.2
|
||||||
doAssert x.obj.name.scale == 1
|
doAssert x.obj.name.scale == 1
|
||||||
|
|
@ -223,7 +223,7 @@ template main {.dirty.} =
|
||||||
doAssert y.scale == 1
|
doAssert y.scale == 1
|
||||||
|
|
||||||
block: # array
|
block: # array
|
||||||
var x: array[10, Object]
|
var x: array[10, Object] = arrayWith(default(Object), 10)
|
||||||
let y = x[0]
|
let y = x[0]
|
||||||
doAssert y.value == 12
|
doAssert y.value == 12
|
||||||
doAssert y.time == 1.2
|
doAssert y.time == 1.2
|
||||||
|
|
@ -234,7 +234,7 @@ template main {.dirty.} =
|
||||||
discard x
|
discard x
|
||||||
|
|
||||||
block: # tuple
|
block: # tuple
|
||||||
var x: ObjectTuple
|
var x = default(ObjectTuple)
|
||||||
doAssert x.base.value == 12
|
doAssert x.base.value == 12
|
||||||
doAssert x.typ == 0
|
doAssert x.typ == 0
|
||||||
doAssert x.obj.time == 1.2
|
doAssert x.obj.time == 1.2
|
||||||
|
|
@ -243,7 +243,7 @@ template main {.dirty.} =
|
||||||
doAssert x.obj.value == 12
|
doAssert x.obj.value == 12
|
||||||
|
|
||||||
block: # tuple in object
|
block: # tuple in object
|
||||||
var x: TupleInObject
|
var x = default(TupleInObject)
|
||||||
doAssert x.data.base.value == 12
|
doAssert x.data.base.value == 12
|
||||||
doAssert x.data.typ == 0
|
doAssert x.data.typ == 0
|
||||||
doAssert x.data.obj.time == 1.2
|
doAssert x.data.obj.time == 1.2
|
||||||
|
|
@ -257,7 +257,7 @@ template main {.dirty.} =
|
||||||
data: array[10, Object]
|
data: array[10, Object]
|
||||||
|
|
||||||
block:
|
block:
|
||||||
var x: ObjectArray
|
var x = default(ObjectArray)
|
||||||
let y = x.data[0]
|
let y = x.data[0]
|
||||||
doAssert y.value == 12
|
doAssert y.value == 12
|
||||||
doAssert y.time == 1.2
|
doAssert y.time == 1.2
|
||||||
|
|
@ -308,7 +308,7 @@ template main {.dirty.} =
|
||||||
doAssert typeof(x.time) is float32
|
doAssert typeof(x.time) is float32
|
||||||
|
|
||||||
block:
|
block:
|
||||||
var x: ObjectVarint1
|
var x = default(ObjectVarint1)
|
||||||
doAssert x.kind == Blue
|
doAssert x.kind == Blue
|
||||||
doAssert x.fill2 == "123"
|
doAssert x.fill2 == "123"
|
||||||
x.cry = 326
|
x.cry = 326
|
||||||
|
|
@ -350,7 +350,7 @@ template main {.dirty.} =
|
||||||
him: int
|
him: int
|
||||||
|
|
||||||
block:
|
block:
|
||||||
var x: ObjectVarint3
|
var x = default(ObjectVarint3)
|
||||||
doAssert x.kind == Blue
|
doAssert x.kind == Blue
|
||||||
doAssert x.name == Blue
|
doAssert x.name == Blue
|
||||||
doAssert x.go == 12
|
doAssert x.go == 12
|
||||||
|
|
@ -375,13 +375,13 @@ template main {.dirty.} =
|
||||||
def: Default = (id: 777, obj: ObjectBase(), name: "fine")
|
def: Default = (id: 777, obj: ObjectBase(), name: "fine")
|
||||||
|
|
||||||
block:
|
block:
|
||||||
var x: Default
|
var x = default(Default)
|
||||||
doAssert x.id == 1
|
doAssert x.id == 1
|
||||||
doAssert x.obj == default(ObjectBase)
|
doAssert x.obj == default(ObjectBase)
|
||||||
doAssert x.name == ""
|
doAssert x.name == ""
|
||||||
|
|
||||||
block:
|
block:
|
||||||
var x: Class
|
var x = default(Class)
|
||||||
doAssert x.def == default(Default)
|
doAssert x.def == default(Default)
|
||||||
doAssert x.def.id == 1
|
doAssert x.def.id == 1
|
||||||
doAssert x.def.obj == default(ObjectBase)
|
doAssert x.def.obj == default(ObjectBase)
|
||||||
|
|
@ -389,7 +389,7 @@ template main {.dirty.} =
|
||||||
|
|
||||||
when not defined(cpp):
|
when not defined(cpp):
|
||||||
block:
|
block:
|
||||||
var x: Member
|
var x = default(Member)
|
||||||
doAssert x.def.id == 777
|
doAssert x.def.id == 777
|
||||||
doAssert x.def.obj == default(ObjectBase)
|
doAssert x.def.obj == default(ObjectBase)
|
||||||
doAssert x.def.name == "fine"
|
doAssert x.def.name == "fine"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue