whole_func_string: function (s, o) {
          var a, i, k;
          JSHINT.errors = [];
          predefined = Object.create(standard);
          if (o) {
              a = o.predef;
              if (a) {
                  if (Array.isArray(a)) {
                      for (i = 0; i < a.length; i += 1) {
                          predefined[a[i]] = true;
                      }
                  } else if (typeof a === 'object') {
                      k = Object.keys(a);
                      for (i = 0; i < k.length; i += 1) {
                          predefined[k[i]] = !!a[k];
                      }
                  }
              }
              if (o.adsafe) {
                  o.safe = true;
              }
              if (o.safe) {
                  o.browser =
                  o.css     =
                  o.debug   =
                  o.devel   =
                  o.evil    =
                  o.forin   =
                  o.on      =
                  o.rhino   =
                  o.windows =
                  o.sub     =
                  o.widget  = false;
  
                  o.eqeqeq  =
                  o.nomen   =
                  o.safe    =
                  o.undef   = true;
  
                  predefined.Date =
                  predefined['eval'] =
                  predefined.Function =
                  predefined.Object = null;
  
                  predefined.ADSAFE =
                  predefined.lib = false;
              }
              option = o;
          } else {
              option = {};
          }
          option.indent = option.indent || 4;
          option.maxerr = option.maxerr || 50;
          adsafe_id = '';
          adsafe_may = false;
          adsafe_went = false;
          approved = {};
          if (option.approved) {
              for (i = 0; i < option.approved.length; i += 1) {
                  approved[option.approved[i]] = option.approved[i];
              }
          } else {
              approved.test = 'test';
          }
          tab = '';
          for (i = 0; i < option.indent; i += 1) {
              tab += ' ';
          }
          indent = 1;
          global = Object.create(predefined);
          scope = global;
          funct = {
              '(global)': true,
              '(name)': '(global)',
              '(scope)': scope,
              '(breakage)': 0,
              '(loopage)': 0
          };
          functions = [funct];
          ids = {};
          urls = [];
          src = false;
          xmode = false;
          stack = null;
          member = {};
          membersOnly = null;
          implied = {};
          inblock = false;
          lookahead = [];
          jsonmode = false;
          warnings = 0;
          lex.init(s);
          prereg = true;
          strict_mode = false;
  
          prevtoken = token = nexttoken = syntax['(begin)'];
          assume();
  
          try {
              advance();
              if (nexttoken.value.charAt(0) === '<') {
                  html();
                  if (option.adsafe && !adsafe_went) {
                      warning("ADsafe violation: Missing ADSAFE.go.", this);
                  }
              } else {
                  switch (nexttoken.id) {
                  case '{':
                  case '[':
                      option.laxbreak = true;
                      jsonmode = true;
                      jsonValue();
                      break;
                  case '@':
                  case '*':
                  case '#':
                  case '.':
                  case ':':
                      xmode = 'style';
                      advance();
                      if (token.id !== '@' || !nexttoken.identifier ||
                              nexttoken.value !== 'charset' || token.line !== 1 ||
                              token.from !== 1) {
                          error("A css file should begin with @charset 'UTF-8';");
                      }
                      advance();
                      if (nexttoken.type !== '(string)' &&
                              nexttoken.value !== 'UTF-8') {
                          error("A css file should begin with @charset 'UTF-8';");
                      }
                      advance();
                      advance(';');
                      styles();
                      break;
  
                  default:
                      if (option.adsafe && option.fragment) {
                          error("Expected '{a}' and instead saw '{b}'.",
                              nexttoken, '<div>', nexttoken.value);
                      }
                      if (nexttoken.value === 'use strict') {
                          warning("Use the function form of \"use strict\".");
                          use_strict();
                      }
                      statements('lib');
                  }
              }
              advance('(end)');
          } catch (e) {
              if (e) {
                  JSHINT.errors.push({
                      reason    : e.message,
                      line      : e.line || nexttoken.line,
                      character : e.character || nexttoken.from
                  }, null);
              }
          }
          return JSHINT.errors.length === 0;
      }
func_code_string: function (s, o) {
          var a, i, k;
          JSHINT.errors = [];
          predefined = Object.create(standard);
          if (o) {
              a = o.predef;
              if (a) {
                  if (Array.isArray(a)) {
                      for (i = 0; i < a.length; i += 1) {
                          predefined[a[i]] = true;
                      }
                  } else if (typeof a === 'object') {
                      k = Object.keys(a);
                      for (i = 0; i < k.length; i += 1) {
                          predefined[k[i]] = !!a[k];
                      }
                  }
              }
              if (o.adsafe) {
                  o.safe = true;
              }
              if (o.safe) {
                  o.browser =
                  o.css     =
                  o.debug   =
                  o.devel   =
                  o.evil    =
                  o.forin   =
                  o.on      =
                  o.rhino   =
                  o.windows =
                  o.sub     =
                  o.widget  = false;
  
                  o.eqeqeq  =
                  o.nomen   =
                  o.safe    =
                  o.undef   = true;
  
                  predefined.Date =
                  predefined['eval'] =
                  predefined.Function =
                  predefined.Object = null;
  
                  predefined.ADSAFE =
                  predefined.lib = false;
              }
              option = o;
          } else {
              option = {};
          }
          option.indent = option.indent || 4;
          option.maxerr = option.maxerr || 50;
          adsafe_id = '';
          adsafe_may = false;
          adsafe_went = false;
          approved = {};
          if (option.approved) {
              for (i = 0; i < option.approved.length; i += 1) {
                  approved[option.approved[i]] = option.approved[i];
              }
          } else {
              approved.test = 'test';
          }
          tab = '';
          for (i = 0; i < option.indent; i += 1) {
              tab += ' ';
          }
          indent = 1;
          global = Object.create(predefined);
          scope = global;
          funct = {
              '(global)': true,
              '(name)': '(global)',
              '(scope)': scope,
              '(breakage)': 0,
              '(loopage)': 0
          };
          functions = [funct];
          ids = {};
          urls = [];
          src = false;
          xmode = false;
          stack = null;
          member = {};
          membersOnly = null;
          implied = {};
          inblock = false;
          lookahead = [];
          jsonmode = false;
          warnings = 0;
          lex.init(s);
          prereg = true;
          strict_mode = false;
  
          prevtoken = token = nexttoken = syntax['(begin)'];
          assume();
  
          try {
              advance();
              if (nexttoken.value.charAt(0) === '<') {
                  html();
                  if (option.adsafe && !adsafe_went) {
                      warning("ADsafe violation: Missing ADSAFE.go.", this);
                  }
              } else {
                  switch (nexttoken.id) {
                  case '{':
                  case '[':
                      option.laxbreak = true;
                      jsonmode = true;
                      jsonValue();
                      break;
                  case '@':
                  case '*':
                  case '#':
                  case '.':
                  case ':':
                      xmode = 'style';
                      advance();
                      if (token.id !== '@' || !nexttoken.identifier ||
                              nexttoken.value !== 'charset' || token.line !== 1 ||
                              token.from !== 1) {
                          error("A css file should begin with @charset 'UTF-8';");
                      }
                      advance();
                      if (nexttoken.type !== '(string)' &&
                              nexttoken.value !== 'UTF-8') {
                          error("A css file should begin with @charset 'UTF-8';");
                      }
                      advance();
                      advance(';');
                      styles();
                      break;
  
                  default:
                      if (option.adsafe && option.fragment) {
                          error("Expected '{a}' and instead saw '{b}'.",
                              nexttoken, '<div>', nexttoken.value);
                      }
                      if (nexttoken.value === 'use strict') {
                          warning("Use the function form of \"use strict\".");
                          use_strict();
                      }
                      statements('lib');
                  }
              }
              advance('(end)');
          } catch (e) {
              if (e) {
                  JSHINT.errors.push({
                      reason    : e.message,
                      line      : e.line || nexttoken.line,
                      character : e.character || nexttoken.from
                  }, null);
              }
          }
          return JSHINT.errors.length === 0;
      }
func_documentation_string: The actual JSHINT function itself.