stringValue property

String stringValue

The String value of the stringToken.

Implementation

String get stringValue {
  String text;

  if (!isBlockString) {
    text = stringToken.text.substring(1, stringToken.text.length - 1);
  } else {
    text = stringToken.text.substring(3, stringToken.text.length - 3).trim();
  }

  var codeUnits = text.codeUnits;
  var buf = StringBuffer();

  for (var i = 0; i < codeUnits.length; i++) {
    var ch = codeUnits[i];

    if (ch == $backslash) {
      if (i < codeUnits.length - 5 && codeUnits[i + 1] == $u) {
        var c1 = codeUnits[i += 2],
            c2 = codeUnits[++i],
            c3 = codeUnits[++i],
            c4 = codeUnits[++i];
        var hexString = String.fromCharCodes([c1, c2, c3, c4]);
        var hexNumber = int.parse(hexString, radix: 16);
        buf.write(String.fromCharCode(hexNumber));
        continue;
      }

      if (i < codeUnits.length - 1) {
        var next = codeUnits[++i];

        switch (next) {
          case $b:
            buf.write('\b');
            break;
          case $f:
            buf.write('\f');
            break;
          case $n:
            buf.writeCharCode($lf);
            break;
          case $r:
            buf.writeCharCode($cr);
            break;
          case $t:
            buf.writeCharCode($tab);
            break;
          default:
            buf.writeCharCode(next);
        }
      } else {
        throw SyntaxError('Unexpected "\\" in string literal.', span);
      }
    } else {
      buf.writeCharCode(ch);
    }
  }

  return buf.toString();
}