return st.data
}
data := reflect.Indirect(st.data);
- typ, ok := data.Type().(reflect.StructType);
+ typ, ok := data.Type().(*reflect.StructType);
if ok {
- for i := 0; i < typ.Len(); i++ {
- name, ftyp, tag, offset := typ.Field(i);
- if name == s {
- return data.(reflect.StructValue).Field(i)
+ for i := 0; i < typ.NumField(); i++ {
+ f := typ.Field(i);
+ if f.Name == s {
+ return data.(*reflect.StructValue).Field(i)
}
}
}
if v == nil {
return true
}
- switch v.Type().Kind() {
- case reflect.StringKind:
- return v.(reflect.StringValue).Get() == "";
- case reflect.StructKind:
+ switch v := v.(type) {
+ case *reflect.StringValue:
+ return v.Get() == "";
+ case *reflect.StructValue:
return false;
- case reflect.ArrayKind:
- return v.(reflect.ArrayValue).Len() == 0;
+ case *reflect.ArrayValue:
+ return v.Len() == 0;
+ case *reflect.SliceValue:
+ return v.Len() == 0;
}
return true;
}
field = reflect.Indirect(field);
// Must be an array/slice
- if field != nil && field.Kind() != reflect.ArrayKind {
+ array, ok := field.(reflect.ArrayOrSliceValue);
+ if !ok {
t.execError(st, r.linenum, ".repeated: %s has bad type %s", r.field, field.Type());
}
if empty(field, true) {
end = r.altstart
}
if field != nil {
- array := field.(reflect.ArrayValue);
for j := 0; j < array.Len(); j++ {
newst := st.clone(array.Elem(j));
for i := start; i < end; {