summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/semexprs.nim4
-rw-r--r--tests/generics/treturn_inference.nim24
2 files changed, 25 insertions, 3 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index b7fac6046..96904f0dd 100644
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -1052,7 +1052,7 @@ proc semIndirectOp(c: PContext, n: PNode, flags: TExprFlags; expectedType: PType
       result.transitionSonsKind(nkCall)
       result.flags.incl nfExplicitCall
       for i in 1..<n.len: result.add n[i]
-      return semExpr(c, result, flags)
+      return semExpr(c, result, flags, expectedType)
     else:
       n[0] = n0
   else:
@@ -3124,7 +3124,7 @@ proc semExpr(c: PContext, n: PNode, flags: TExprFlags = {}, expectedType: PType
     result = semFieldAccess(c, n, flags)
     if result.kind == nkDotCall:
       result.transitionSonsKind(nkCall)
-      result = semExpr(c, result, flags)
+      result = semExpr(c, result, flags, expectedType)
   of nkBind:
     message(c.config, n.info, warnDeprecated, "bind is deprecated")
     result = semExpr(c, n[0], flags, expectedType)
diff --git a/tests/generics/treturn_inference.nim b/tests/generics/treturn_inference.nim
index fa9b70f69..331a9d4db 100644
--- a/tests/generics/treturn_inference.nim
+++ b/tests/generics/treturn_inference.nim
@@ -159,4 +159,26 @@ block:
 
   let res = doStuff()
   doAssert res.kind == Error
-  doAssert res.errVal == "Error"
\ No newline at end of file
+  doAssert res.errVal == "Error"
+
+# ufcs
+block:
+  proc getValue[T](_: string): T =
+    doAssert T is int
+    44
+  
+  proc `'test`[T](_: string): T =
+    55
+
+  let a: int = getValue("")
+  let b: int = "".getValue()
+  let c: int = "".getValue
+  let d: int = getValue ""
+  let e: int = getValue""
+  let f: int = 12345'test
+  doAssert a == 44
+  doAssert b == 44
+  doAssert c == 44
+  doAssert d == 44
+  doAssert e == 44
+  doAssert f == 55