func (s {{.Node.Name}}) {{.Field.Name|title}}() ({{.FieldType}}, error) {
	{{template "_checktag" . -}}
	p, err := s.Struct.Ptr({{.Field.Slot.Offset}})
	{{if .Default.IsValid -}}
	if err != nil {
		return {{.FieldType}}{}, err
	}
	ss, err := p.StructDefault({{.Default}})
	return {{.FieldType}}{Struct: ss}, err
	{{- else -}}
	return {{.FieldType}}{Struct: p.Struct()}, err
	{{- end}}
}

{{template "_hasfield" .}}

func (s {{.Node.Name}}) Set{{.Field.Name|title}}(v {{.FieldType}}) error {
	{{template "_settag" . -}}
	return s.Struct.SetPtr({{.Field.Slot.Offset}}, v.Struct.ToPtr())
}

// New{{.Field.Name|title}} sets the {{.Field.Name}} field to a newly
// allocated {{.FieldType}} struct, preferring placement in s's segment.
func (s {{.Node.Name}}) New{{.Field.Name|title}}() ({{.FieldType}}, error) {
	{{template "_settag" . -}}
	ss, err := {{.G.RemoteNodeNew .TypeNode .Node}}(s.Struct.Segment())
	if err != nil {
		return {{.FieldType}}{}, err
	}
	err = s.Struct.SetPtr({{.Field.Slot.Offset}}, ss.Struct.ToPtr())
	return ss, err
}

