123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- discard """
- output: '''
- @[1, 2, 3]@[1, 2, 3]
- a
- a
- 1
- 3 is an int
- 2 is an int
- miau is a string
- f1 1 1 1
- f1 2 3 3
- f1 10 20 30
- f2 100 100 100
- f2 200 300 300
- f2 300 400 400
- f3 10 10 20
- f3 10 15 25
- true true
- false true
- world
- typedescDefault
- '''
- """
- template reject(x) =
- assert(not compiles(x))
- block:
- # https://github.com/nim-lang/Nim/issues/7756
- proc foo[T](x: seq[T], y: seq[T] = x) =
- echo x, y
- let a = @[1, 2, 3]
- foo(a)
- block:
- # https://github.com/nim-lang/Nim/issues/1201
- proc issue1201(x: char|int = 'a') = echo x
- issue1201()
- issue1201('a')
- issue1201(1)
- # https://github.com/nim-lang/Nim/issues/7000
- proc test(a: int|string = 2) =
- when a is int:
- echo a, " is an int"
- elif a is string:
- echo a, " is a string"
- test(3) # works
- test() # works
- test("miau")
- block:
- # https://github.com/nim-lang/Nim/issues/3002 and similar
- proc f1(a: int, b = a, c = b) =
- echo "f1 ", a, " ", b, " ", c
- proc f2(a: int, b = a, c: int = b) =
- echo "f2 ", a, " ", b, " ", c
- proc f3(a: int, b = a, c = a + b) =
- echo "f3 ", a, " ", b, " ", c
- f1 1
- f1(2, 3)
- f1 10, 20, 30
- 100.f2
- 200.f2 300
- 300.f2(400)
- 10.f3()
- 10.f3(15)
- reject:
- # This is a type mismatch error:
- proc f4(a: int, b = a, c: float = b) = discard
- reject:
- # undeclared identifier
- proc f5(a: int, b = c, c = 10) = discard
- reject:
- # undeclared identifier
- proc f6(a: int, b = b) = discard
- reject:
- # undeclared identifier
- proc f7(a = a) = discard
- block:
- proc f(a: var int, b: ptr int, c = addr(a)) =
- echo addr(a) == b, " ", b == c
- var x = 10
- f(x, addr(x))
- f(x, nil, nil)
- block:
- # https://github.com/nim-lang/Nim/issues/1046
- proc pySubstr(s: string, start: int, endd = s.len()): string =
- var
- revStart = start
- revEnd = endd
- if start < 0:
- revStart = s.len() + start
- if endd < 0:
- revEnd = s.len() + endd
- return s[revStart .. revEnd-1]
- echo pySubstr("Hello world", -5)
- # bug #11660
- func typedescDefault(T: typedesc; arg: T = 0) = debugEcho "typedescDefault"
- typedescDefault(int)
|