@@ -165,13 +165,6 @@ func (vr *valueReader) advanceFrame() {
165165 vr .stack [vr .frame ].end = 0
166166}
167167
168- func (vr * valueReader ) pushElement (t Type ) {
169- vr .advanceFrame ()
170-
171- vr .stack [vr .frame ].mode = mElement
172- vr .stack [vr .frame ].vType = t
173- }
174-
175168func (vr * valueReader ) pushValue (t Type ) {
176169 vr .advanceFrame ()
177170
@@ -803,7 +796,6 @@ func (vr *valueReader) ReadTimestamp() (uint32, uint32, error) {
803796}
804797
805798// ReadUndefined reads a BSON Undefined value, advancing the reader position
806-
807799// to the end of the Undefined value.
808800func (vr * valueReader ) ReadUndefined () error {
809801 if err := vr .ensureElementValue (TypeUndefined , 0 , "ReadUndefined" ); err != nil {
@@ -813,6 +805,8 @@ func (vr *valueReader) ReadUndefined() error {
813805 return vr .pop ()
814806}
815807
808+ // ReadElement reads the next element in the BSON document, advancing the
809+ // reader position to the end of the element.
816810func (vr * valueReader ) ReadElement () (string , ValueReader , error ) {
817811 switch vr .stack [vr .frame ].mode {
818812 case mTopLevel , mDocument , mCodeWithScope :
@@ -826,7 +820,7 @@ func (vr *valueReader) ReadElement() (string, ValueReader, error) {
826820 }
827821
828822 if t == 0 {
829- if vr .offset != vr .stack [vr .frame ].end {
823+ if vr .src . pos () != vr .stack [vr .frame ].end {
830824 return "" , nil , vr .invalidDocumentLengthError ()
831825 }
832826
@@ -839,7 +833,10 @@ func (vr *valueReader) ReadElement() (string, ValueReader, error) {
839833 return "" , nil , err
840834 }
841835
842- vr .pushElement (Type (t ))
836+ vr .advanceFrame ()
837+
838+ vr .stack [vr .frame ].mode = mElement
839+ vr .stack [vr .frame ].vType = Type (t )
843840 return name , vr , nil
844841}
845842
0 commit comments