implemented generic converters

This commit is contained in:
Araq 2012-12-05 22:03:36 +01:00
commit 38ab30d153
7 changed files with 89 additions and 7 deletions

View file

@ -0,0 +1,28 @@
type
TFoo = object
data: array[0..100, int]
TSecond = distinct TFoo
proc `[]` (self: var TFoo, x: int): var int =
return self.data[x]
proc `[]=` (self: var TFoo, x, y: int) =
# only `[]` returning a 'var T' seems to not work for now :-/
self.data[x] = y
proc second(self: var TFoo): var TSecond =
return TSecond(self)
proc `[]`(self: var TSecond, x: int): var int =
return TFoo(self).data[2*x]
var f: TFoo
for i in 0..f.data.high: f[i] = 2 * i
echo f.second[1]
#echo `second[]`(f,1)
# this is the only way I could use it, but not what I expected

View file

@ -0,0 +1,30 @@
discard """
output: '''666
666'''
"""
# test the new generic converters:
type
TFoo2[T] = object
x: T
TFoo[T] = object
data: array[0..100, T]
converter toFoo[T](a: TFoo2[T]): TFoo[T] =
result.data[0] = a.x
proc p(a: TFoo[int]) =
echo a.data[0]
proc q[T](a: TFoo[T]) =
echo a.data[0]
var
aa: TFoo2[int]
aa.x = 666
p aa
q aa