aboutsummaryrefslogtreecommitdiff
path: root/src/debug/dwarf
diff options
context:
space:
mode:
authorDaniel Martí <mvdan@mvdan.cc>2018-02-19 20:48:58 +0000
committerDaniel Martí <mvdan@mvdan.cc>2018-02-19 21:32:13 +0000
commit3cb54c86043a92ab080a89c06643d80015a5638e (patch)
tree5dd08d5186e052ba8bdd5bdcf8821b8e702bdeb2 /src/debug/dwarf
parenta95c5f04f342f151fbcad8c9ccb6cab454cf08d5 (diff)
downloadgo-3cb54c86043a92ab080a89c06643d80015a5638e.tar.xz
text/template: differentiate nil from missing arg
reflect.Value is a struct and does not have a kind nor any flag for untyped nils. As a result, it is tricky to differentiate when we're missing a value, from when we have one but it is untyped nil. We could start using *reflect.Value instead, to add one level of indirection, using nil for missing values and new(reflect.Value) for untyped nils. However, that is a fairly invasive change, and would also mean unnecessary allocations. Instead, use a special reflect.Value that depicts when a value is missing. This is the case for the "final" reflect.Value in multiple scenarios, such as the start of a pipeline. Give it a specific, unexported type too, to make sure it cannot be mistaken for any other valid value. Finally, replace "final.IsValid()" with "final != missingVal", since final.IsValid() will be false when final is an untyped nil. Also add a few test cases, all different variants of the untyped nil versus missing value scenario. Fixes #18716. Change-Id: Ia9257a84660ead5a7007fd1cced7782760b62d9d Reviewed-on: https://go-review.googlesource.com/95215 Run-TryBot: Daniel Martí <mvdan@mvdan.cc> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org>
Diffstat (limited to 'src/debug/dwarf')
0 files changed, 0 insertions, 0 deletions