docs: static void shiftLeftDestructive(Slice decimal, int leftShifts)
      {
          if (leftShifts == 0) {
              return;
          }
  
          int wordShifts = leftShifts / 64;
          int bitShiftsInWord = leftShifts % 64;
          int shiftRestore = 64 - bitShiftsInWord;
  
          // check overflow
          if (bitShiftsInWord != 0) {
              if ((getLong(decimal, 1 - wordShifts) & (-1L << shiftRestore)) != 0) {
                  throwOverflowException();
              }
          }
          if (wordShifts == 1) {
              if (getLong(decimal, 1) != 0) {
                  throwOverflowException();
              }
          }
  
          // Store negative before settings values to result.
          boolean negative = isNegative(decimal);
  
          long low;
          long high;
  
          switch (wordShifts) {
              case 0:
                  low = getLong(decimal, 0);
                  high = getLong(decimal, 1);
                  break;
              case 1:
                  low = 0;
                  high = getLong(decimal, 0);
                  break;
              default:
                  throw new IllegalArgumentException();
          }
  
          if (bitShiftsInWord > 0) {
              high = (high << bitShiftsInWord) | (low >>> shiftRestore);
              low = (low << bitShiftsInWord);
          }
  
          pack(decimal, low, high, negative);
      }