From 2dea7678f04c0814df2c022ba57da8d570f9aec3 Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Wed, 6 Aug 2025 18:42:27 +0400 Subject: [PATCH] fix(tolk/type-inference): fix type inference inside generic calls --- .../src/e2e/tolk/testcases/types2/generic.test | 16 ++++++++++++++++ server/src/languages/tolk/type-inference.ts | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/server/src/e2e/tolk/testcases/types2/generic.test b/server/src/e2e/tolk/testcases/types2/generic.test index 73edbea2..c3f0d8ac 100644 --- a/server/src/e2e/tolk/testcases/types2/generic.test +++ b/server/src/e2e/tolk/testcases/types2/generic.test @@ -114,3 +114,19 @@ fun main() { } ------------------------------------------------------------------------ ok + +======================================================================== +Generic method as right hand of ternary inside other generic function call +======================================================================== +fun eq(a: T1): [T1] { + return [a]; +} + +fun eq2(value: X) { return value; } + +fun name(f: int) { + eq(f ? null as int? : eq2(2)); +//! ^ int? +} +------------------------------------------------------------------------ +ok diff --git a/server/src/languages/tolk/type-inference.ts b/server/src/languages/tolk/type-inference.ts index f9b3a6ee..4f0e8cd6 100644 --- a/server/src/languages/tolk/type-inference.ts +++ b/server/src/languages/tolk/type-inference.ts @@ -900,7 +900,7 @@ class InferenceWalker { // infer generic parameters // val a = 100; // a = getT(); // T = int - if (hint && functionType.returnTy.hasGenerics()) { + if (hint && functionType.returnTy.hasGenerics() && !hint.hasGenerics()) { sub = sub.deduce(functionType.returnTy, hint) }