From 2da6f72bb78de6e6ca3d387d970cb21bf36684be Mon Sep 17 00:00:00 2001 From: ian Date: Thu, 9 Feb 2012 08:19:58 +0000 Subject: libgo: Update to weekly.2012-02-07. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184034 138bc75d-0d04-0410-961f-82ee72b054a4 --- libgo/go/encoding/xml/read.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'libgo/go/encoding/xml/read.go') diff --git a/libgo/go/encoding/xml/read.go b/libgo/go/encoding/xml/read.go index 871fe059cfa..bde875a0123 100644 --- a/libgo/go/encoding/xml/read.go +++ b/libgo/go/encoding/xml/read.go @@ -265,12 +265,13 @@ func (p *Decoder) unmarshal(val reflect.Value, start *StartElement) error { saveData = v case reflect.Struct: - sv = v - typ := sv.Type() + typ := v.Type() if typ == nameType { v.Set(reflect.ValueOf(start.Name)) break } + + sv = v tinfo, err = getTypeInfo(typ) if err != nil { return err @@ -541,19 +542,21 @@ Loop: panic("unreachable") } -// Have already read a start element. -// Read tokens until we find the end element. -// Token is taking care of making sure the -// end element matches the start element we saw. -func (p *Decoder) Skip() error { +// Skip reads tokens until it has consumed the end element +// matching the most recent start element already consumed. +// It recurs if it encounters a start element, so it can be used to +// skip nested structures. +// It returns nil if it finds an end element matching the start +// element; otherwise it returns an error describing the problem. +func (d *Decoder) Skip() error { for { - tok, err := p.Token() + tok, err := d.Token() if err != nil { return err } switch tok.(type) { case StartElement: - if err := p.Skip(); err != nil { + if err := d.Skip(); err != nil { return err } case EndElement: -- cgit v1.2.1