code: func codeBitmap(code []byte) bitvec {
  	// The bitmap is 4 bytes longer than necessary, in case the code
  	// ends with a PUSH32, the algorithm will push zeroes onto the
  	// bitvector outside the bounds of the actual code.
  	bits := make(bitvec, len(code)/8+1+4)
  	for pc := uint64(0); pc < uint64(len(code)); {
  		op := OpCode(code[pc])
  
  		if op >= PUSH1 && op <= PUSH32 {
  			numbits := op - PUSH1 + 1
  			pc++
  			for ; numbits >= 8; numbits -= 8 {
  				bits.set8(pc) // 8
  				pc += 8
  			}
  			for ; numbits > 0; numbits-- {
  				bits.set(pc)
  				pc++
  			}
  		} else {
  			pc++
  		}
  	}
  	return bits
  }
docs: // codeBitmap collects data locations in code.