Skip to content

Commit 27beace

Browse files
committed
Fix for weekly.2011-04-27
1 parent dd75096 commit 27beace

File tree

2 files changed

+50
-50
lines changed

2 files changed

+50
-50
lines changed

mustache.go

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ func (tmpl *Template) parsePartial(name string) (*Template, os.Error) {
132132
}
133133
var filename string
134134
for _, name := range filenames {
135-
f, err := os.Open(name, os.O_RDONLY, 0666)
135+
f, err := os.Open(name)
136136
f.Close()
137137
if err == nil {
138138
filename = name
@@ -343,7 +343,7 @@ func callMethod(data reflect.Value, name string) (result reflect.Value, found bo
343343
}
344344
}
345345
}
346-
if nd, ok := data.(*reflect.PtrValue); ok {
346+
if nd := data; nd.Kind() == reflect.Ptr {
347347
data = nd.Elem()
348348
} else {
349349
break
@@ -357,11 +357,11 @@ func call(v reflect.Value, method reflect.Method) reflect.Value {
357357
funcType := method.Type
358358
// Method must take no arguments, meaning as a func it has one argument (the receiver)
359359
if funcType.NumIn() != 1 {
360-
return nil
360+
return reflect.Value{}
361361
}
362362
// Method must return a single value.
363363
if funcType.NumOut() == 0 {
364-
return nil
364+
return reflect.Value{}
365365
}
366366
// Result will be the zeroth element of the returned slice.
367367
return method.Func.Call([]reflect.Value{v})[0]
@@ -373,7 +373,7 @@ func lookup(contextChain *vector.Vector, name string) reflect.Value {
373373
Outer:
374374
for i := contextChain.Len() - 1; i >= 0; i-- {
375375
v := contextChain.At(i).(reflect.Value)
376-
for v != nil {
376+
for v.IsValid() {
377377
typ := v.Type()
378378
if n := v.Type().NumMethod(); n > 0 {
379379
for i := 0; i < n; i++ {
@@ -384,21 +384,21 @@ Outer:
384384
}
385385
}
386386
}
387-
switch av := v.(type) {
388-
case *reflect.PtrValue:
387+
switch av := v; av.Kind() {
388+
case reflect.Ptr:
389389
v = av.Elem()
390-
case *reflect.InterfaceValue:
390+
case reflect.Interface:
391391
v = av.Elem()
392-
case *reflect.StructValue:
392+
case reflect.Struct:
393393
ret := av.FieldByName(name)
394-
if ret != nil {
394+
if ret.IsValid() {
395395
return ret
396396
} else {
397397
continue Outer
398398
}
399-
case *reflect.MapValue:
400-
ret := av.Elem(reflect.NewValue(name))
401-
if ret != nil {
399+
case reflect.Map:
400+
ret := av.MapIndex(reflect.ValueOf(name))
401+
if ret.IsValid() {
402402
return ret
403403
} else {
404404
continue Outer
@@ -408,30 +408,30 @@ Outer:
408408
}
409409
}
410410
}
411-
return nil
411+
return reflect.Value{}
412412
}
413413

414414
func isNil(v reflect.Value) bool {
415-
if v == nil || v.Interface() == nil {
415+
if !v.IsValid() || v.Interface() == nil {
416416
return true
417417
}
418418

419419
valueInd := indirect(v)
420-
switch val := valueInd.(type) {
421-
case *reflect.BoolValue:
422-
return !val.Get()
420+
switch val := valueInd; val.Kind() {
421+
case reflect.Bool:
422+
return !val.Bool()
423423
}
424424

425425
return false
426426
}
427427

428428
func indirect(v reflect.Value) reflect.Value {
429429
loop:
430-
for v != nil {
431-
switch av := v.(type) {
432-
case *reflect.PtrValue:
430+
for v.IsValid() {
431+
switch av := v; av.Kind() {
432+
case reflect.Ptr:
433433
v = av.Elem()
434-
case *reflect.InterfaceValue:
434+
case reflect.Interface:
435435
v = av.Elem()
436436
default:
437437
break loop
@@ -450,16 +450,16 @@ func renderSection(section *sectionElement, contextChain *vector.Vector, buf io.
450450
return
451451
} else {
452452
valueInd := indirect(value)
453-
switch val := valueInd.(type) {
454-
case *reflect.SliceValue:
453+
switch val := valueInd; val.Kind() {
454+
case reflect.Slice:
455455
for i := 0; i < val.Len(); i++ {
456-
contexts.Push(val.Elem(i))
456+
contexts.Push(val.Index(i))
457457
}
458-
case *reflect.ArrayValue:
458+
case reflect.Array:
459459
for i := 0; i < val.Len(); i++ {
460-
contexts.Push(val.Elem(i))
460+
contexts.Push(val.Index(i))
461461
}
462-
case *reflect.MapValue, *reflect.StructValue:
462+
case reflect.Map, reflect.Struct:
463463
contexts.Push(value)
464464
default:
465465
contexts.Push(context)
@@ -483,7 +483,7 @@ func renderElement(element interface{}, contextChain *vector.Vector, buf io.Writ
483483
buf.Write(elem.text)
484484
case *varElement:
485485
val := lookup(contextChain, elem.name)
486-
if val != nil {
486+
if val.IsValid() {
487487
if elem.raw {
488488
fmt.Fprint(buf, val.Interface())
489489
} else {
@@ -508,7 +508,7 @@ func (tmpl *Template) Render(context ...interface{}) string {
508508
var buf bytes.Buffer
509509
var contextChain vector.Vector
510510
for _, c := range context {
511-
val := reflect.NewValue(c)
511+
val := reflect.ValueOf(c)
512512
contextChain.Push(val)
513513
}
514514
tmpl.renderTemplate(&contextChain, &buf)

mustache_test.go

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,38 +28,38 @@ type settings struct {
2828
Allow bool
2929
}
3030

31-
func (u User) func1() string {
31+
func (u User) Func1() string {
3232
return u.Name
3333
}
3434

35-
func (u *User) func2() string {
35+
func (u *User) Func2() string {
3636
return u.Name
3737
}
3838

39-
func (u *User) func3() (map[string]string, os.Error) {
39+
func (u *User) Func3() (map[string]string, os.Error) {
4040
return map[string]string{"name": u.Name}, nil
4141
}
4242

43-
func (u *User) func4() (map[string]string, os.Error) {
43+
func (u *User) Func4() (map[string]string, os.Error) {
4444
return nil, nil
4545
}
4646

47-
func (u *User) func5() (*settings, os.Error) {
47+
func (u *User) Func5() (*settings, os.Error) {
4848
return &settings{true}, nil
4949
}
5050

5151

52-
func (u *User) func6() (*vector.Vector, os.Error) {
52+
func (u *User) Func6() (*vector.Vector, os.Error) {
5353
var v vector.Vector
5454
v.Push(&settings{true})
5555
return &v, nil
5656
}
5757

58-
func (u User) truefunc1() bool {
58+
func (u User) Truefunc1() bool {
5959
return true
6060
}
6161

62-
func (u *User) truefunc2() bool {
62+
func (u *User) Truefunc2() bool {
6363
return true
6464
}
6565

@@ -125,18 +125,18 @@ var tests = []Test{
125125
{`{{^a}}b{{/a}}`, map[string]interface{}{"a": "nonempty string"}, ""},
126126

127127
//function tests
128-
{`{{#users}}{{func1}}{{/users}}`, map[string]interface{}{"users": []User{{"Mike", 1}}}, "Mike"},
129-
{`{{#users}}{{func1}}{{/users}}`, map[string]interface{}{"users": []*User{&User{"Mike", 1}}}, "Mike"},
130-
{`{{#users}}{{func2}}{{/users}}`, map[string]interface{}{"users": []*User{&User{"Mike", 1}}}, "Mike"},
131-
132-
{`{{#users}}{{#func3}}{{name}}{{/func3}}{{/users}}`, map[string]interface{}{"users": []*User{&User{"Mike", 1}}}, "Mike"},
133-
{`{{#users}}{{#func4}}{{name}}{{/func4}}{{/users}}`, map[string]interface{}{"users": []*User{&User{"Mike", 1}}}, ""},
134-
{`{{#truefunc1}}abcd{{/truefunc1}}`, User{"Mike", 1}, "abcd"},
135-
{`{{#truefunc1}}abcd{{/truefunc1}}`, &User{"Mike", 1}, "abcd"},
136-
{`{{#truefunc2}}abcd{{/truefunc2}}`, &User{"Mike", 1}, "abcd"},
137-
{`{{#func5}}{{#Allow}}abcd{{/Allow}}{{/func5}}`, &User{"Mike", 1}, "abcd"},
138-
{`{{#user}}{{#func5}}{{#Allow}}abcd{{/Allow}}{{/func5}}{{/user}}`, map[string]interface{}{"user": &User{"Mike", 1}}, "abcd"},
139-
{`{{#user}}{{#func6}}{{#Allow}}abcd{{/Allow}}{{/func6}}{{/user}}`, map[string]interface{}{"user": &User{"Mike", 1}}, "abcd"},
128+
{`{{#users}}{{Func1}}{{/users}}`, map[string]interface{}{"users": []User{{"Mike", 1}}}, "Mike"},
129+
{`{{#users}}{{Func1}}{{/users}}`, map[string]interface{}{"users": []*User{&User{"Mike", 1}}}, "Mike"},
130+
{`{{#users}}{{Func2}}{{/users}}`, map[string]interface{}{"users": []*User{&User{"Mike", 1}}}, "Mike"},
131+
132+
{`{{#users}}{{#Func3}}{{name}}{{/Func3}}{{/users}}`, map[string]interface{}{"users": []*User{&User{"Mike", 1}}}, "Mike"},
133+
{`{{#users}}{{#Func4}}{{name}}{{/Func4}}{{/users}}`, map[string]interface{}{"users": []*User{&User{"Mike", 1}}}, ""},
134+
{`{{#Truefunc1}}abcd{{/Truefunc1}}`, User{"Mike", 1}, "abcd"},
135+
{`{{#Truefunc1}}abcd{{/Truefunc1}}`, &User{"Mike", 1}, "abcd"},
136+
{`{{#Truefunc2}}abcd{{/Truefunc2}}`, &User{"Mike", 1}, "abcd"},
137+
{`{{#Func5}}{{#Allow}}abcd{{/Allow}}{{/Func5}}`, &User{"Mike", 1}, "abcd"},
138+
{`{{#user}}{{#Func5}}{{#Allow}}abcd{{/Allow}}{{/Func5}}{{/user}}`, map[string]interface{}{"user": &User{"Mike", 1}}, "abcd"},
139+
{`{{#user}}{{#Func6}}{{#Allow}}abcd{{/Allow}}{{/Func6}}{{/user}}`, map[string]interface{}{"user": &User{"Mike", 1}}, "abcd"},
140140

141141
//context chaining
142142
{`hello {{#section}}{{name}}{{/section}}`, map[string]interface{}{"section": map[string]string{"name": "world"}}, "hello world"},

0 commit comments

Comments
 (0)