123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- discard """
- targets: "c cpp js"
- output: "1"
- """
- proc viewInto(a: array[4, string]): lent string =
- result = a[0]
- proc passToVar(x: var string) =
- discard
- proc main =
- let x = ["1", "2", "3", "4"]
- echo viewInto(x)
- doAssert(not compiles(passToVar(viewInto(x))))
- main()
- template main2 = # bug #15958
- when defined(js):
- proc sameAddress[T](a, b: T): bool {.importjs: "(# === #)".}
- else:
- template sameAddress(a, b): bool = a.unsafeAddr == b.unsafeAddr
- proc byLent[T](a: T): lent T = a
- let a = [11,12]
- let b = @[21,23]
- let ss = {1, 2, 3, 5}
- doAssert byLent(a) == [11,12]
- doAssert sameAddress(byLent(a), a)
- doAssert byLent(b) == @[21,23]
- # pending bug #16073
- doAssert sameAddress(byLent(b), b)
- doAssert byLent(ss) == {1, 2, 3, 5}
- doAssert sameAddress(byLent(ss), ss)
- let r = new(float)
- r[] = 10.0
- # bug #16073
- doAssert byLent(r)[] == 10.0
- when not defined(js): # pending bug https://github.com/timotheecour/Nim/issues/372
- let p = create(float)
- p[] = 20.0
- doAssert byLent(p)[] == 20.0
- proc byLent2[T](a: openArray[T]): lent T = a[0]
- doAssert byLent2(a) == 11
- doAssert sameAddress(byLent2(a), a[0])
- doAssert byLent2(b) == 21
- doAssert sameAddress(byLent2(b), b[0])
- proc byLent3[T](a: varargs[T]): lent T = a[1]
- let
- x = 10
- y = 20
- z = 30
- doAssert byLent3(x, y, z) == 20
- main2()
- when false:
- # bug: Error: unhandled exception: 'node' is not accessible using discriminant 'kind' of type 'TFullReg' [FieldDefect]
- static: main2()
|