code: private char readEscapeCharacter()
    {
      if (pos == limit && !fillBuffer(1)) {
        throw syntaxError("Unterminated escape sequence");
      }
  
      char escaped = buffer[pos++];
      switch (escaped) {
      case 'u':
        if (pos + 4 > limit && !fillBuffer(4)) {
          throw syntaxError("Unterminated escape sequence");
        }
        // Equivalent to Integer.parseInt(stringPool.get(buffer, pos, 4), 16);
        char result = 0;
        for (int i = pos, end = i + 4; i < end; i++) {
          char c = buffer[i];
          result <<= 4;
          if (c >= '0' && c <= '9') {
            result += (c - '0');
          } else if (c >= 'a' && c <= 'f') {
            result += (c - 'a' + 10);
          } else if (c >= 'A' && c <= 'F') {
            result += (c - 'A' + 10);
          } else {
            throw new NumberFormatException("\\u" + new String(buffer, pos, 4));
          }
        }
        pos += 4;
        return result;
  
      case 't':
        return '\t';
  
      case 'b':
        return '\b';
  
      case 'n':
        return '\n';
  
      case 'r':
        return '\r';
  
      case 'f':
        return '\f';
  
      case '\n':
        lineNumber++;
        lineStart = pos;
        // fall-through
  
      case '\'':
      case '"':
      case '\\':
      default:
        return escaped;
      }
    }
docs: Unescapes the character identified by the character or characters that
  immediately follow a backslash. The backslash '\' should have already
  been read. This supports both unicode escapes "u000A" and two-character
  escapes "\n".
  
  @throws NumberFormatException if any unicode escape sequences are
  malformed.