code: func (e *SegmentTermsEnum) pushFrameAt(arc *fst.Arc, fp int64, length int) (f *segmentTermsEnumFrame, err error) {
  	f = e.frame(1 + e.currentFrame.ord)
  	f.arc = arc
  	if f.fpOrig == fp && f.nextEnt != -1 {
  		// fmt.Printf("      push reused frame ord=%v fp=%v isFloor?=%v hasTerms=%v pref=%v nextEnt=%v targetBeforeCurrentLength=%v term.length=%v vs prefix=%v\n",
  		// 	f.ord, f.fp, f.isFloor, f.hasTerms, e.term, f.nextEnt, e.targetBeforeCurrentLength, e.term.length, f.prefix)
  		if f.ord > e.targetBeforeCurrentLength {
  			f.rewind()
  		} else {
  			// fmt.Println("        skip rewind!")
  		}
  		if length != f.prefix {
  			panic("assert fail")
  		}
  	} else {
  		f.nextEnt = -1
  		f.prefix = length
  		f.state.TermBlockOrd = 0
  		f.fpOrig, f.fp = fp, fp
  		f.lastSubFP = -1
  		// fmt.Printf("      push new frame ord=%v fp=%v hasTerms=%v isFloor=%v pref=%v\n",
  		// 	f.ord, f.fp, f.hasTerms, f.isFloor, e.term)
  	}
  	return f, nil
  }
docs: // Pushes next'd frame or seek'd frame; we later
  // lazy-load the frame only when needed