From 5e4648232b255eaa2130d619130c9fdd25c75091 Mon Sep 17 00:00:00 2001 From: metagn Date: Sun, 25 Jun 2023 17:52:16 +0300 Subject: [PATCH] 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 (cherry picked from commit 20037a47499ea183afb0e8d2a3f68c2b2952aa5d) --- compiler/sigmatch.nim | 4 +++- tests/overload/tvartypeclass.nim | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 tests/overload/tvartypeclass.nim diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index d5feb44b8c..b1a528afbc 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -211,7 +211,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, @@ -247,6 +247,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 diff --git a/tests/overload/tvartypeclass.nim b/tests/overload/tvartypeclass.nim new file mode 100644 index 0000000000..04f3f5a910 --- /dev/null +++ b/tests/overload/tvartypeclass.nim @@ -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