discard """
output: '''
n
n
(one: 1, two: 2, three: 3)
1
2
3
(one: 4, two: 5, three: 6)
4
(one: 7, two: 8, three: 9)
7
8
9
(foo: 38, other: "string here")
43
100
90
'''
"""
block tindex:
type
TMyTuple = tuple[a, b: int]
proc indexOf(t: typedesc, name: string): int =
## takes a tuple and looks for the field by name.
## returs index of that field.
var
d: t
i = 0
for n, x in fieldPairs(d):
if n == name: return i
i.inc
raise newException(ValueError, "No field " & name & " in type " &
astToStr(t))
doAssert TMyTuple.indexOf("b") == 1
block ttemplate:
# bug #1902
# This works.
for name, value in (n: "v").fieldPairs:
echo name
template wrapper(): void =
for name, value in (n: "v").fieldPairs:
echo name
wrapper()
block tbreak:
# bug #2134
type
TestType = object
one: int
two: int
three: int
var
ab = TestType(one:1, two:2, three:3)
ac = TestType(one:4, two:5, three:6)
ad = TestType(one:7, two:8, three:9)
tstSeq = [ab, ac, ad]
for tstElement in mitems(tstSeq):
echo tstElement
for tstField in fields(tstElement):
#for tstField in [1,2,4,6]:
echo tstField
if tstField == 4:
break
block timplicit_with_partial:
type
Base = ref object of RootObj
Foo {.partial.} = ref object of Base
proc my(f: Foo) =
#var f.next = f
let f.foo = 38
let f.other = "string here"
echo f[]
echo f.foo + 5
var g: Foo
new(g)
my(g)
type
FooTask {.partial.} = ref object of RootObj
proc foo(t: FooTask) {.liftLocals: t.} =
var x = 90
if true:
var x = 10
while x < 100:
inc x
echo x
echo x
foo(FooTask())