tpl: Send actual values to in from intersect - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit df44b1930a8b5be8959a808fc788a42c6b0166bb
 (DIR) parent 600558273e34215098664290c3364d5291cdb77a
 (HTM) Author: Cameron Moore <moorereason@gmail.com>
       Date:   Sun, 13 Mar 2016 16:39:03 -0500
       
       tpl: Send actual values to in from intersect
       
       The `intersect` function uses `in` to avoid adding duplicates to the
       resulting set.  We were passing `reflect.Value` items when we should
       have been using `Value.Interface()` to send the actual data structure.
       This fixes that.
       
       See #1952
       
       Diffstat:
         M tpl/template_funcs.go               |       6 +++---
         M tpl/template_funcs_test.go          |       2 +-
       
       2 files changed, 4 insertions(+), 4 deletions(-)
       ---
 (DIR) diff --git a/tpl/template_funcs.go b/tpl/template_funcs.go
       @@ -330,20 +330,20 @@ func intersect(l1, l2 interface{}) (interface{}, error) {
                                                l2vv := l2v.Index(j)
                                                switch l1vv.Kind() {
                                                case reflect.String:
       -                                                if l1vv.Type() == l2vv.Type() && l1vv.String() == l2vv.String() && !in(r, l2vv) {
       +                                                if l1vv.Type() == l2vv.Type() && l1vv.String() == l2vv.String() && !in(r.Interface(), l2vv.Interface()) {
                                                                r = reflect.Append(r, l2vv)
                                                        }
                                                case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
                                                        switch l2vv.Kind() {
                                                        case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
       -                                                        if l1vv.Int() == l2vv.Int() && !in(r, l2vv) {
       +                                                        if l1vv.Int() == l2vv.Int() && !in(r.Interface(), l2vv.Interface()) {
                                                                        r = reflect.Append(r, l2vv)
                                                                }
                                                        }
                                                case reflect.Float32, reflect.Float64:
                                                        switch l2vv.Kind() {
                                                        case reflect.Float32, reflect.Float64:
       -                                                        if l1vv.Float() == l2vv.Float() && !in(r, l2vv) {
       +                                                        if l1vv.Float() == l2vv.Float() && !in(r.Interface(), l2vv.Interface()) {
                                                                        r = reflect.Append(r, l2vv)
                                                                }
                                                        }
 (DIR) diff --git a/tpl/template_funcs_test.go b/tpl/template_funcs_test.go
       @@ -776,7 +776,7 @@ func TestIntersect(t *testing.T) {
                        sequence2 interface{}
                        expect    interface{}
                }{
       -                {[]string{"a", "b", "c"}, []string{"a", "b"}, []string{"a", "b"}},
       +                {[]string{"a", "b", "c", "c"}, []string{"a", "b", "b"}, []string{"a", "b"}},
                        {[]string{"a", "b"}, []string{"a", "b", "c"}, []string{"a", "b"}},
                        {[]string{"a", "b", "c"}, []string{"d", "e"}, []string{}},
                        {[]string{}, []string{}, []string{}},