whole_func_string: function Char(value, kind, loc) {
    let symbol;
    let codePoint;
  
    switch (kind) {
      case 'decimal': {
        codePoint = Number(value.slice(1));
        symbol = String.fromCodePoint(codePoint);
        break;
      }
      case 'oct': {
        codePoint = parseInt(value.slice(1), 8);
        symbol = String.fromCodePoint(codePoint);
        break;
      }
      case 'hex':
      case 'unicode': {
        if (value.lastIndexOf('\\u') > 0) {
          let [lead, trail] = value.split('\\u').slice(1);
          lead = parseInt(lead, 16);
          trail = parseInt(trail, 16);
          codePoint = (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000;
  
          symbol = String.fromCodePoint(codePoint);
        } else {
          const hex = value.slice(2).replace('{', '');
          codePoint = parseInt(hex, 16);
          if (codePoint > 0x10ffff) {
            throw new SyntaxError(`Bad character escape sequence: ${value}`);
          }
  
          symbol = String.fromCodePoint(codePoint);
        }
        break;
      }
      case 'meta': {
        switch (value) {
          case '\\t':
            symbol = '\t';
            codePoint = symbol.codePointAt(0);
            break;
          case '\\n':
            symbol = '\n';
            codePoint = symbol.codePointAt(0);
            break;
          case '\\r':
            symbol = '\r';
            codePoint = symbol.codePointAt(0);
            break;
          case '\\v':
            symbol = '\v';
            codePoint = symbol.codePointAt(0);
            break;
          case '\\f':
            symbol = '\f';
            codePoint = symbol.codePointAt(0);
            break;
          case '\\b':
            symbol = '\b';
            codePoint = symbol.codePointAt(0);
          case '\\0':
            symbol = '\0';
            codePoint = 0;
          case '.':
            symbol = '.';
            codePoint = NaN;
            break;
          default:
            codePoint = NaN;
        }
        break;
      }
      case 'simple': {
        symbol = value;
        codePoint = symbol.codePointAt(0);
        break;
      }
    }
  
    return Node({
      type: 'Char',
      value,
      kind,
      symbol,
      codePoint,
    }, loc);
  }
func_code_string: function Char(value, kind, loc) {
    let symbol;
    let codePoint;
  
    switch (kind) {
      case 'decimal': {
        codePoint = Number(value.slice(1));
        symbol = String.fromCodePoint(codePoint);
        break;
      }
      case 'oct': {
        codePoint = parseInt(value.slice(1), 8);
        symbol = String.fromCodePoint(codePoint);
        break;
      }
      case 'hex':
      case 'unicode': {
        if (value.lastIndexOf('\\u') > 0) {
          let [lead, trail] = value.split('\\u').slice(1);
          lead = parseInt(lead, 16);
          trail = parseInt(trail, 16);
          codePoint = (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000;
  
          symbol = String.fromCodePoint(codePoint);
        } else {
          const hex = value.slice(2).replace('{', '');
          codePoint = parseInt(hex, 16);
          if (codePoint > 0x10ffff) {
            throw new SyntaxError(`Bad character escape sequence: ${value}`);
          }
  
          symbol = String.fromCodePoint(codePoint);
        }
        break;
      }
      case 'meta': {
        switch (value) {
          case '\\t':
            symbol = '\t';
            codePoint = symbol.codePointAt(0);
            break;
          case '\\n':
            symbol = '\n';
            codePoint = symbol.codePointAt(0);
            break;
          case '\\r':
            symbol = '\r';
            codePoint = symbol.codePointAt(0);
            break;
          case '\\v':
            symbol = '\v';
            codePoint = symbol.codePointAt(0);
            break;
          case '\\f':
            symbol = '\f';
            codePoint = symbol.codePointAt(0);
            break;
          case '\\b':
            symbol = '\b';
            codePoint = symbol.codePointAt(0);
          case '\\0':
            symbol = '\0';
            codePoint = 0;
          case '.':
            symbol = '.';
            codePoint = NaN;
            break;
          default:
            codePoint = NaN;
        }
        break;
      }
      case 'simple': {
        symbol = value;
        codePoint = symbol.codePointAt(0);
        break;
      }
    }
  
    return Node({
      type: 'Char',
      value,
      kind,
      symbol,
      codePoint,
    }, loc);
  }
func_documentation_string: Creates a character node.