123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- 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())
|