Merge branch 'master' of github.com:Araq/Nimrod

This commit is contained in:
Araq 2012-12-06 07:10:19 +01:00
commit 1d842e8b75
21 changed files with 174 additions and 55 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

@ -1,5 +1,5 @@
discard """
line: 11
line: 22
errormgs: "type mismatch"
"""
@ -7,9 +7,17 @@ type
PObj = ref TObj not nil
TObj = object
x: int
MyString = string not nil
var x: PObj = nil
#var x: PObj = nil
proc p(x: string not nil): int =
result = 45
proc q(x: MyString) = nil
proc q2(x: string) = nil
q2(nil)
q(nil)

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