function readString(quote) {
    tokPos++;
    var out = "";
    for (;;) {
      if (tokPos >= inputLen) raise(tokStart, "Unterminated string constant");
      var ch = input.charCodeAt(tokPos);
      if (ch === quote) {
        ++tokPos;
        finishToken(_string, out);
        return;
      }
      if (ch === 92) { // '\'
        ch = input.charCodeAt(++tokPos);
        var octal = /^[0-7]+/.exec(input.slice(tokPos, tokPos + 3));
        if (octal) {
          octal = octal[0];
        }
        while (octal && parseInt(octal, 8) > 255) {
          octal = octal.slice(0, -1);
        }
        if (octal === "0") {
          octal = null;
        }
        ++tokPos;
        if (octal) {
          if (strict) raise(tokPos - 2, "Octal literal in strict mode");
          out += String.fromCharCode(parseInt(octal, 8));
          tokPos += octal.length - 1;
        } else {
          switch (ch) {
            case 110: out += "\n"; break; // 'n' -> '\n'
            case 114: out += "\r"; break; // 'r' -> '\r'
            case 120: out += String.fromCharCode(readHexChar(2)); break; // 'x'
            case 117: out += String.fromCharCode(readHexChar(4)); break; // 'u'
            case 85: out += String.fromCharCode(readHexChar(8)); break; // 'U'
            case 116: out += "\t"; break; // 't' -> '\t'
            case 98: out += "\b"; break; // 'b' -> '\b'
            case 118: out += "\u000b"; break; // 'v' -> '\u000b'
            case 102: out += "\f"; break; // 'f' -> '\f'
            case 48: out += "\0"; break; // 0 -> '\0'
            case 13:  // '\r'
              if (input.charCodeAt(tokPos) === 10) {
                ++tokPos; // '\r\n'
              }
            case 10: // ' \n'
              if (options.locations) {
                tokLineStart = tokPos;
                ++tokCurLine;
              }
              break;
            default: out += String.fromCharCode(ch); break;
          }
        }
      } else {
        if (ch === 13 || ch === 10 || ch === 8232 || ch === 8233) {
          raise(tokStart, "Unterminated string constant");
        }
        out += String.fromCharCode(ch); // '\'
        ++tokPos;
      }
    }
  }
Read a string value, interpreting backslash-escapes.

@param {number} quote