diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-12-17 14:20:57 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2016-12-17 14:20:57 +0100 |
commit | b0134309292e41a9b29777b5bdd79f2a1278a03d (patch) | |
tree | 352e573c59ce22e21d8bfe26d38b1e584e25cd15 /web | |
parent | 14b9eaee06894f5bf00548117984381d37f16ec7 (diff) | |
download | Nim-b0134309292e41a9b29777b5bdd79f2a1278a03d.tar.gz |
reworked emit pragma; fixes #4730
Diffstat (limited to 'web')
-rw-r--r-- | web/news/e029_version_0_16_0.rst | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/web/news/e029_version_0_16_0.rst b/web/news/e029_version_0_16_0.rst index 2a0c81b46..905504791 100644 --- a/web/news/e029_version_0_16_0.rst +++ b/web/news/e029_version_0_16_0.rst @@ -55,6 +55,28 @@ Compiler Additions Language Additions ------------------ +- The ``emit`` pragma now takes a list of Nim expressions instead + of a single string literal. This list can easily contain non-strings + like template parameters. This means ``emit`` works out of the + box with templates and no new quoting rules needed to be introduced. + The old way with backtick quoting is still supported but will be + deprecated. + +.. code-block:: nim + type Vector* {.importcpp: "std::vector", header: "<vector>".}[T] = object + + template `[]=`*[T](v: var Vector[T], key: int, val: T) = + {.emit: [v, "[", key, "] = ", val, ";"].} + + proc setLen*[T](v: var Vector[T]; size: int) {.importcpp: "resize", nodecl.} + proc `[]`*[T](v: var Vector[T], key: int): T {.importcpp: "(#[#])", nodecl.} + + proc main = + var v: Vector[float] + v.setLen 1 + v[0] = 6.0 + echo v[0] + Bugfixes -------- |