whole_func_string: function parseKey() {
      var specialValues = ['null', 'true', 'false'];
      var key = '';
      var c = curr();
  
      var regexp = /[a-zA-Z_$\d]/; // letter, number, underscore, dollar character
      while (regexp.test(c)) {
        key += c;
        i++;
        c = curr();
      }
  
      if (specialValues.indexOf(key) === -1) {
        chars.push('"' + key + '"');
      }
      else {
        chars.push(key);
      }
    }
func_code_string: function parseKey() {
      var specialValues = ['null', 'true', 'false'];
      var key = '';
      var c = curr();
  
      var regexp = /[a-zA-Z_$\d]/; // letter, number, underscore, dollar character
      while (regexp.test(c)) {
        key += c;
        i++;
        c = curr();
      }
  
      if (specialValues.indexOf(key) === -1) {
        chars.push('"' + key + '"');
      }
      else {
        chars.push(key);
      }
    }
func_documentation_string: parse an unquoted key