mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
76 lines
1.6 KiB
Nim
76 lines
1.6 KiB
Nim
discard """
|
|
targets: "cpp"
|
|
matrix: "--gc:orc"
|
|
"""
|
|
|
|
import std/options
|
|
|
|
# bug #18410
|
|
type
|
|
O = object of RootObj
|
|
val: pointer
|
|
|
|
proc p(): Option[O] = none(O)
|
|
|
|
doAssert $p() == "none(O)"
|
|
|
|
# bug #17351
|
|
type
|
|
Foo = object of RootObj
|
|
Foo2 = object of Foo
|
|
Bar = object
|
|
x: Foo2
|
|
|
|
var b = Bar()
|
|
discard b
|
|
|
|
# bug #4678
|
|
{.emit: """/*TYPESECTION*/
|
|
enum class SomeEnum {A,B,C};
|
|
""".}
|
|
type
|
|
EnumVector[T: enum] {.importcpp: "std::vector", header: "vector".} = object
|
|
SomeEnum {.importcpp, nodecl.} = enum
|
|
A,B,C
|
|
|
|
proc asVector*[T](t: T): EnumVector[T] =
|
|
discard
|
|
# Nim generates this signature here:
|
|
# N_NIMCALL(std::vector<> , asvector_106028_3197418230)(SomeEnum t0)
|
|
|
|
discard asVector(SomeEnum.A)
|
|
|
|
|
|
block: # bug #10219
|
|
type
|
|
Vector[T] {.importcpp: "std::vector", header: "vector".} = object
|
|
|
|
proc initVector[T](n: csize_t): Vector[T]
|
|
{.importcpp: "std::vector<'*0>(@)", header: "vector".}
|
|
|
|
proc unsafeIndex[T](this: var Vector[T], i: csize_t): var T
|
|
{.importcpp: "#[#]", header: "vector".}
|
|
|
|
proc `[]`[T](this: var Vector[T], i: Natural): var T {.inline, noinit.} =
|
|
when compileOption("boundChecks"):
|
|
# this.checkIndex i
|
|
discard
|
|
result = this.unsafeIndex(csize_t(i))
|
|
|
|
var v1 = initVector[int](10)
|
|
doAssert v1[0] == 0
|
|
|
|
block: # bug #12703 bug #19588
|
|
type
|
|
cstringConstImpl {.importc:"const char*".} = cstring
|
|
constChar = distinct cstringConstImpl
|
|
|
|
{.emit: """
|
|
const char* foo() {
|
|
return "hello";
|
|
}
|
|
""".}
|
|
proc foo(): constChar {.importcpp.} # change to importcpp for C++ backend
|
|
doAssert $(foo().cstring) == "hello"
|
|
|