diff options
author | Ivan Bobev <bobeff@protonmail.ch> | 2020-11-06 20:56:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-06 18:56:09 +0000 |
commit | 3c85aa9e53cbaae5fae83f9fd29de3bdb107c7aa (patch) | |
tree | d014b546d43997de23e1f95b78e40536ba6b179c /doc/manual.rst | |
parent | 60c364fb224a8b55dc7cacc5a589c569cf202ec5 (diff) | |
download | Nim-3c85aa9e53cbaae5fae83f9fd29de3bdb107c7aa.tar.gz |
Make `{.requiresInit.}` to work for distinct types (#15869)
Make `requiresInit` pragma to work for distinct types in addition to objects. Tagging of distinct types with `requiresInit` pragma was already supported, but its impact wasn't applied. Now its behavior when applied on distinct types is as follows. Given the following distinct type definitions: ```nim type DistinctObject {.requiresInit, borrow: `.`.} = distinct MyObject DistinctString {.requiresInit.} = distinct string ``` The following code blocks will fail to compile: ```nim var foo: DistinctFoo foo.x = "test" doAssert foo.x == "test" ``` ```nim var s: DistinctString s = "test" doAssert s == "test" ``` But these ones will compile successfully: ```nim let foo = DistinctFoo(Foo(x: "test")) doAssert foo.x == "test" ``` ```nim let s = "test" doAssert s == "test" ```
Diffstat (limited to 'doc/manual.rst')
-rw-r--r-- | doc/manual.rst | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/doc/manual.rst b/doc/manual.rst index d9f9cc9b9..4e5b861b1 100644 --- a/doc/manual.rst +++ b/doc/manual.rst @@ -2697,6 +2697,36 @@ the variable has been initialized and does not rely on syntactic properties: x = a() # use x +`requiresInit` pragma can also be applyied to `distinct` types. + +Given the following distinct type definitions: + +.. code-block:: nim + type + DistinctObject {.requiresInit, borrow: `.`.} = distinct MyObject + DistinctString {.requiresInit.} = distinct string + +The following code blocks will fail to compile: + +.. code-block:: nim + var foo: DistinctFoo + foo.x = "test" + doAssert foo.x == "test" + +.. code-block:: nim + var s: DistinctString + s = "test" + doAssert s == "test" + +But these ones will compile successfully: + +.. code-block:: nim + let foo = DistinctFoo(Foo(x: "test")) + doAssert foo.x == "test" + +.. code-block:: nim + let s = "test" + doAssert s == "test" Let statement ------------- |