func()

in ubjson/parse.go [165:200]


func (p *Parser) finalize() error {
	for len(p.state.stack) > 0 {
		var err error

		switch p.state.current.stateType {
		case stArrayCount, stArrayTyped:
			if p.length.current != 0 || p.state.current.stateStep != stCont {
				return errMissingArrEnd
			}

			err = p.visitor.OnArrayFinished()
		case stObjectCount, stObjectTyped:
			step := p.state.current.stateStep
			l := p.length.current
			if l != 0 || step != stFieldName {
				return errMissingObjEnd
			}
			err = p.visitor.OnObjectFinished()
		}

		if err != nil {
			return err
		}
		_, err = p.popState()
	}

	st := &p.state.current
	incomplete := len(p.state.stack) > 0 ||
		st.stateStep != stStart ||
		st.stateType != stNext

	if incomplete {
		return errIncomplete
	}
	return nil
}