diff options
Diffstat (limited to 'tests/lookups/tbind.nim')
-rw-r--r-- | tests/lookups/tbind.nim | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/lookups/tbind.nim b/tests/lookups/tbind.nim new file mode 100644 index 000000000..f3fb952e3 --- /dev/null +++ b/tests/lookups/tbind.nim @@ -0,0 +1,78 @@ +discard """ +output: ''' +3 +1 +1 +1 +5 +''' +""" + + +block tbind: +# Test the new ``bind`` keyword for templates + + proc p1(x: int8, y: int): int = return x + y + + template tempBind(x, y): untyped = + bind p1 + p1(x, y) + + proc p1(x: int, y: int8): int = return x - y + + # This is tricky: the call to ``p1(1'i8, 2'i8)`` should not fail in line 6, + # because it is not ambiguous there. But it is ambiguous after line 8. + + echo tempBind(1'i8, 2'i8) #OUT 3 + + +import mbind3 +echo genId() #OUT 1 + + +import strtabs +block tbinoverload: + template t() = + block: + bind newStringTable + discard {"Content-Type": "text/html"}.newStringTable() + + discard {:}.newStringTable + #discard {"Content-Type": "text/html"}.newStringTable() + t() + + +block tmixin: + type + TFoo1 = object of RootObj + v: int + TFoo2 = object of TFoo1 + v2: int + + proc test(f: TFoo1) = + echo "1" + + proc Foo[T](f: T) = + mixin test + test(f) + + var + a: TFoo1 + b: TFoo2 + + + proc test(f: TFoo2) = + echo "2" + + Foo(a) + Foo(b) + +# issue #11811 +proc p(a : int) = + echo a + +proc printVar*[T:int|float|string](a : T) = + bind p + p(a) + +printVar(5) |