proc: Move nil check into toField

This commit is contained in:
Luke Hoban 2015-10-06 16:34:18 -07:00 committed by Derek Parker
parent e18aa9da01
commit a8512ba11a

@ -134,6 +134,9 @@ func (v *Variable) toField(field *dwarf.StructField) (*Variable, error) {
name = fmt.Sprintf("%s.%s", v.Name, field.Name)
}
}
if v.Addr == 0 {
return nil, fmt.Errorf("%s is nil", v.Name)
}
return newVariable(name, uintptr(int64(v.Addr)+field.ByteOffset), field.Type, v.thread)
}
@ -447,13 +450,6 @@ func (scope *EvalScope) packageVarAddr(name string) (*Variable, error) {
return nil, fmt.Errorf("could not find symbol value for %s", name)
}
func (v *Variable) toFieldNilChecked(field *dwarf.StructField, name string) (*Variable, error) {
if v.Addr == 0 {
return nil, fmt.Errorf("%s is nil", name)
}
return v.toField(field)
}
func (v *Variable) structMember(memberName string) (*Variable, error) {
structVar, err := v.maybeDereference()
structVar.Name = v.Name
@ -467,7 +463,7 @@ func (v *Variable) structMember(memberName string) (*Variable, error) {
if field.Name != memberName {
continue
}
return structVar.toFieldNilChecked(field, v.Name)
return structVar.toField(field)
}
// Check for embedded field only if field was
// not a regular struct member
@ -483,14 +479,14 @@ func (v *Variable) structMember(memberName string) (*Variable, error) {
// Check for embedded field referenced by type name
parts := strings.Split(field.Name, ".")
if len(parts) > 1 && parts[1] == memberName {
embeddedVar, err := structVar.toFieldNilChecked(field, v.Name)
embeddedVar, err := structVar.toField(field)
if err != nil {
return nil, err
}
return embeddedVar, nil
}
// Recursively check for promoted fields on the embedded field
embeddedVar, err := structVar.toFieldNilChecked(field, v.Name)
embeddedVar, err := structVar.toField(field)
if err != nil {
return nil, err
}