From 1ebf1aaa80664bfb19ca09845d4258fe6dff25df Mon Sep 17 00:00:00 2001 From: Zahary Karadjov Date: Mon, 13 Apr 2015 23:49:41 +0300 Subject: importing of C++ nested generics like std::vector::iterator, using the apostrophe operator --- tests/cpp/vector_iterator.nim | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 tests/cpp/vector_iterator.nim (limited to 'tests/cpp') diff --git a/tests/cpp/vector_iterator.nim b/tests/cpp/vector_iterator.nim new file mode 100644 index 000000000..bd26db351 --- /dev/null +++ b/tests/cpp/vector_iterator.nim @@ -0,0 +1,21 @@ +discard """ + cmd: "nim cpp $file" +""" + +{.emit: """ + +template +struct Vector { + struct Iterator { + + }; +}; + +""".} + +type + Vector {.importcpp: "Vector".} [T] = object + VectorIterator {.importcpp: "Vector<'2>::Iterator".} [T] = object + +var x: VectorIterator[void] + -- cgit 1.4.1-2-gfad0 From 6fb372d96bade748aa6cb3484fef2118b4585f26 Mon Sep 17 00:00:00 2001 From: Zahary Karadjov Date: Tue, 14 Apr 2015 00:03:31 +0300 Subject: The getSubsystem example in the manual currently fails with a codegen error A faulty proc declaration is generated: N_NIMCALL(System::Input*, SystemManager::getSubsystem<'*0>())(void); The manual has been edited to add a nodecl pragma, which alleviates the issue Fix a typo in the vector_iterator example from the previous commit. --- doc/nimc.txt | 2 +- tests/cpp/get_subsystem.nim | 22 ++++++++++++++++++++++ tests/cpp/vector_iterator.nim | 6 ++---- 3 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 tests/cpp/get_subsystem.nim (limited to 'tests/cpp') diff --git a/doc/nimc.txt b/doc/nimc.txt index 1af35d694..cfbccc479 100644 --- a/doc/nimc.txt +++ b/doc/nimc.txt @@ -506,7 +506,7 @@ For example: .. code-block:: nim type Input {.importcpp: "System::Input".} = object - proc getSubsystem*[T](): ptr T {.importcpp: "SystemManager::getSubsystem<'*0>()".} + proc getSubsystem*[T](): ptr T {.importcpp: "SystemManager::getSubsystem<'*0>()", nodecl.} let x: ptr Input = getSubsystem[Input]() diff --git a/tests/cpp/get_subsystem.nim b/tests/cpp/get_subsystem.nim new file mode 100644 index 000000000..38593b03a --- /dev/null +++ b/tests/cpp/get_subsystem.nim @@ -0,0 +1,22 @@ +discard """ + cmd: "nim cpp $file" +""" + +{.emit: """ + +namespace System { + struct Input {}; +} + +struct SystemManager { + template + static T* getSubsystem() { return new T; } +}; + +""".} + +type Input {.importcpp: "System::Input".} = object +proc getSubsystem*[T](): ptr T {.importcpp: "SystemManager::getSubsystem<'*0>()".} + +let input: ptr Input = getSubsystem[Input]() + diff --git a/tests/cpp/vector_iterator.nim b/tests/cpp/vector_iterator.nim index bd26db351..cb5ab33af 100644 --- a/tests/cpp/vector_iterator.nim +++ b/tests/cpp/vector_iterator.nim @@ -6,16 +6,14 @@ discard """ template struct Vector { - struct Iterator { - - }; + struct Iterator {}; }; """.} type Vector {.importcpp: "Vector".} [T] = object - VectorIterator {.importcpp: "Vector<'2>::Iterator".} [T] = object + VectorIterator {.importcpp: "Vector<'0>::Iterator".} [T] = object var x: VectorIterator[void] -- cgit 1.4.1-2-gfad0