• Russ Cox's avatar
    text/template: reintroduce implicit indirect of interface values in builtin funcs · 39e3cbff
    Russ Cox authored
    CL 31462 made it possible to operate directly on reflect.Values
    instead of always forcing a round trip to interface{} and back.
    The round trip was losing addressability, which hurt users.
    
    The round trip was also losing "interface-ness", which helped users.
    That is, using reflect.ValueOf(v.Interface()) instead of v was doing
    an implicit indirect any time v was itself an interface{} value: the result
    was the reflect.Value for the underlying concrete value contained in the
    interface, not the interface itself.
    
    CL 31462 eliminated some "unnecessary" reflect.Value round trips
    in order to preserve addressability, but in doing so it lost this implicit
    indirection. This CL adds the indirection back.
    
    It may help to compare the changes in this CL against funcs.go from CL 31462:
    https://go-review.googlesource.com/#/c/31462/4/src/text/template/funcs.go
    
    Everywhere CL 31462 changed 'v := reflect.ValueOf(x)' to 'v := x',
    this CL changes 'v := x' to 'v := indirectInterface(x)'.
    
    Fixes #17714.
    
    Change-Id: I67cec4eb41fed1d56e1c19f12b0abbd0e59d35a2
    Reviewed-on: https://go-review.googlesource.com/33139
    Run-TryBot: Russ Cox <rsc@golang.org>
    Reviewed-by: 's avatarRob Pike <r@golang.org>
    39e3cbff
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
context Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
plugin Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
vendor/golang_org/x Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
cmp.bash Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
naclmake.bash Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...