From ae9ba260f62b4ae3f7ab78be9eef544ff7dd72f2 Mon Sep 17 00:00:00 2001 From: Timothee Cour Date: Thu, 4 Feb 2021 15:39:19 -0800 Subject: [PATCH] clarify docs for wrapnils (#16929) Co-authored-by: Dominik Picheta --- lib/std/wrapnils.nim | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/std/wrapnils.nim b/lib/std/wrapnils.nim index 71205c887e..5b2dd97692 100644 --- a/lib/std/wrapnils.nim +++ b/lib/std/wrapnils.nim @@ -19,8 +19,13 @@ runnableExamples: assert ?.f2.x1 == "a" # same as f2.x1 (no nil LHS in this chain) assert ?.Foo(x1: "a").x1 == "a" # can use constructor inside - # when you know a sub-expression is not nil, you can scope it as follows: - assert ?.(f2.x2.x2).x3[] == 0 # because `f` is nil + # when you know a sub-expression doesn't involve a `nil` (e.g. `f2.x2.x2`), + # you can scope it as follows: + assert ?.(f2.x2.x2).x3[] == 0 + + assert (?.f2.x2.x2).x3 == nil # this terminates ?. early + import segfaults # enable `NilAccessDefect` exceptions + doAssertRaises(NilAccessDefect): echo (?.f2.x2.x2).x3[] type Wrapnil[T] = object valueImpl: T