code: func (r *Lexer) fetchString() {
  	r.pos++
  	data := r.Data[r.pos:]
  
  	isValid, hasEscapes, length := findStringLen(data)
  	if !isValid {
  		r.pos += length
  		r.errParse("unterminated string literal")
  		return
  	}
  	if !hasEscapes {
  		r.token.byteValue = data[:length]
  		r.pos += length + 1
  		return
  	}
  
  	r.token.byteValue = make([]byte, 0, length)
  	p := 0
  	for i := 0; i < len(data); {
  		switch data[i] {
  		case '"':
  			r.pos += i + 1
  			r.token.byteValue = append(r.token.byteValue, data[p:i]...)
  			i++
  			return
  
  		case '\\':
  			r.token.byteValue = append(r.token.byteValue, data[p:i]...)
  			off, err := r.processEscape(data[i:])
  			if err != nil {
  				r.errParse(err.Error())
  				return
  			}
  			i += off
  			p = i
  
  		default:
  			i++
  		}
  	}
  	r.errParse("unterminated string literal")
  }
docs: // fetchString scans a string literal token.