123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- discard """
- output: '''12
- 4'''
- """
- {.emit: """
- NI sum(NI* a, NI len) {
- NI i, result = 0;
- for (i = 0; i < len; ++i) result += a[i];
- return result;
- }
- """.}
- proc sum(a: ptr int; len: int): int {.importc, nodecl.}
- proc main =
- let foo = [8, 3, 1]
- echo sum(unsafeAddr foo[0], foo.len)
- # bug #3736
- proc p(x: seq[int]) = discard x[0].unsafeAddr # works
- proc q(x: seq[SomeInteger]) = discard x[0].unsafeAddr # doesn't work
- p(@[1])
- q(@[1])
- main()
- # bug #9403
- type
- MyObj = ref object
- len: int
- val: UncheckedArray[uint64]
- proc spot(x: MyObj): int64 =
- result = cast[UncheckedArray[int64]](x.val)[0]
- proc newMyObj(len: int): MyObj =
- unsafeNew(result, sizeof(result[]) + len * sizeof(uint64))
- result.len = len
- result.val[0] = 4u64
- result.val[1] = 8u64
- echo spot(newMyObj(2))
|