summary refs log tree commit diff stats
path: root/doc/destructors.rst
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2020-03-04 14:28:53 +0100
committerGitHub <noreply@github.com>2020-03-04 14:28:53 +0100
commita0eca7518223a18f3633150de2c8d3c1c9e71560 (patch)
tree3a3a7690c066e214e073e2a9c2fd33a9876dc7eb /doc/destructors.rst
parent614fb7567c80c3b071394714c3809c005aaad397 (diff)
downloadNim-a0eca7518223a18f3633150de2c8d3c1c9e71560.tar.gz
sink parameter inference for types that have destructors (#13544)
* ensure capitalize doesn't take an inferred sink parameter

* sink parameter inference: first version, for now disabled. Changed that sink parameters can be consumed multiple times in order to adhere to our spec.

* sink inference can now be disabled with .nosinks; sometimes for proc type interop this is required

* fixes yet another critical DFA bug

* better implementation that also understands if expressions etc

* document sink parameter inference and allow for global disabling
Diffstat (limited to 'doc/destructors.rst')
-rw-r--r--doc/destructors.rst17
1 files changed, 17 insertions, 0 deletions
diff --git a/doc/destructors.rst b/doc/destructors.rst
index d2027102a..6d3ed00dd 100644
--- a/doc/destructors.rst
+++ b/doc/destructors.rst
@@ -256,6 +256,23 @@ An implementation is allowed, but not required to implement even more move
 optimizations (and the current implementation does not).
 
 
+Sink parameter inference
+========================
+
+The current implementation does a limited form of sink parameter
+inference. The `.nosinks`:idx: pragma can be used to disable this inference
+for a single routine:
+
+.. code-block:: nim
+
+  proc addX(x: T; child: T) {.nosinks.} =
+    x.s.add child
+
+To disable it for a section of code, one can
+use `{.push sinkInference: off.}`...`{.pop.}`.
+
+The details of the inference algorithm are currently undocumented.
+
 
 Rewrite rules
 =============