make var object match better than object (#22152)

* fix `var object` not matching better than `object`

fixes #13302

* remove comment for brevity

* try note

* try minimize breaks
This commit is contained in:
metagn
2023-06-25 17:52:16 +03:00
committed by GitHub
parent f718f295df
commit 20037a4749
2 changed files with 14 additions and 1 deletions

View File

@@ -215,7 +215,7 @@ proc sumGeneric(t: PType): int =
# and Foo[T] has the value 2 so that we know Foo[Foo[T]] is more
# specific than Foo[T].
var t = t
var isvar = 1
var isvar = 0
while true:
case t.kind
of tyGenericInst, tyArray, tyRef, tyPtr, tyDistinct, tyUncheckedArray,
@@ -251,6 +251,8 @@ proc sumGeneric(t: PType): int =
of tyBool, tyChar, tyEnum, tyObject, tyPointer,
tyString, tyCstring, tyInt..tyInt64, tyFloat..tyFloat128,
tyUInt..tyUInt64, tyCompositeTypeClass:
return isvar + 1
of tyBuiltInTypeClass:
return isvar
else:
return 0

View File

@@ -0,0 +1,11 @@
# issue #13302
proc foo(x: object): int = x.i*2
proc foo(x: var object) = x.i*=2
type Foo = object
i: int
let x = Foo(i: 3)
var y = Foo(i: 4)
doAssert foo(x) == 6
foo(y)
doAssert y.i == 8