mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-20 06:20:38 +00:00
fixes object default fields bugs and add tests (#20839)
* fixes object default fields bugs and add tests * Update compiler/semmagic.nim * Update compiler/sem.nim * Update compiler/sem.nim Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
This commit is contained in:
@@ -3,7 +3,7 @@ discard """
|
||||
targets: "c cpp js"
|
||||
"""
|
||||
|
||||
import std/[times, tables, macros]
|
||||
import std/[times, macros]
|
||||
|
||||
type
|
||||
Guess = object
|
||||
@@ -27,6 +27,10 @@ import mobject_default_value
|
||||
block:
|
||||
let x = Default()
|
||||
doAssert x.se == 0'i32
|
||||
|
||||
block:
|
||||
let x = default(Default)
|
||||
doAssert x.se == 0'i32
|
||||
# echo Default(poi: 12)
|
||||
# echo Default(poi: 17)
|
||||
|
||||
@@ -120,6 +124,19 @@ template main {.dirty.} =
|
||||
doAssert rVal == 0 # it should be 1
|
||||
doAssert objVal.r == 1
|
||||
|
||||
block: # bug #16744
|
||||
type
|
||||
R = range[1..10]
|
||||
Obj = object
|
||||
r: R
|
||||
|
||||
var
|
||||
rVal: R = default(R) # Works fine
|
||||
objVal = Obj()
|
||||
|
||||
doAssert rVal == 0 # it should be 1
|
||||
doAssert objVal.r == 1
|
||||
|
||||
block: # bug #3608
|
||||
type
|
||||
abc = ref object
|
||||
@@ -148,6 +165,9 @@ template main {.dirty.} =
|
||||
let y = ObjectBaseDistinct(default(ObjectBase))
|
||||
doAssert ObjectBase(y).value == 12
|
||||
|
||||
let m = ObjectBaseDistinct(ObjectBase())
|
||||
doAssert ObjectBase(m).value == 12
|
||||
|
||||
proc hello(): ObjectBaseDistinct =
|
||||
result = ObjectBaseDistinct(default(ObjectBase))
|
||||
|
||||
@@ -192,13 +212,25 @@ template main {.dirty.} =
|
||||
doAssert x.name.time == 1.2
|
||||
doAssert x.name.scale == 1
|
||||
|
||||
block:
|
||||
let x = Object2()
|
||||
doAssert x.name.value == 12
|
||||
doAssert x.name.time == 1.2
|
||||
doAssert x.name.scale == 1
|
||||
|
||||
block:
|
||||
var x: ref Object2
|
||||
new x
|
||||
doAssert x[] == default(Object2)
|
||||
|
||||
block:
|
||||
var x = default(Object3) # todo Object3() ?
|
||||
var x = default(Object3)
|
||||
doAssert x.obj.name.value == 12
|
||||
doAssert x.obj.name.time == 1.2
|
||||
doAssert x.obj.name.scale == 1
|
||||
|
||||
block:
|
||||
var x = Object3()
|
||||
doAssert x.obj.name.value == 12
|
||||
doAssert x.obj.name.time == 1.2
|
||||
doAssert x.obj.name.scale == 1
|
||||
@@ -275,7 +307,6 @@ template main {.dirty.} =
|
||||
doAssert y.time == 1.2
|
||||
doAssert y.scale == 1
|
||||
|
||||
|
||||
block:
|
||||
var x: PrellDeque[int]
|
||||
doAssert x.pendingTasks == 0
|
||||
|
||||
Reference in New Issue
Block a user