diff options
-rw-r--r-- | compiler/semexprs.nim | 4 | ||||
-rw-r--r-- | tests/generics/treturn_inference.nim | 24 |
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 |