whole_func_string: function () {
          var input = this.source;
          for (;;) {
              var ch = input[this.cursor++];
              var next = input[this.cursor];
              if (ch === '\n' && !this.scanNewlines) {
                  this.lineno++;
              } else if (ch === '/' && next === '*') {
                  this.cursor++;
                  for (;;) {
                      ch = input[this.cursor++];
                      if (ch === undefined)
                          throw this.newSyntaxError("Unterminated comment");
  
                      if (ch === '*') {
                          next = input[this.cursor];
                          if (next === '/') {
                              this.cursor++;
                              break;
                          }
                      } else if (ch === '\n') {
                          this.lineno++;
                      }
                  }
              } else if (ch === '/' && next === '/') {
                  this.cursor++;
                  for (;;) {
                      ch = input[this.cursor++];
                      if (ch === undefined)
                          return;
  
                      if (ch === '\n') {
                          this.lineno++;
                          break;
                      }
                  }
              } else if (ch !== ' ' && ch !== '\t') {
                  this.cursor--;
                  return;
              }
          }
      }
func_code_string: function () {
          var input = this.source;
          for (;;) {
              var ch = input[this.cursor++];
              var next = input[this.cursor];
              if (ch === '\n' && !this.scanNewlines) {
                  this.lineno++;
              } else if (ch === '/' && next === '*') {
                  this.cursor++;
                  for (;;) {
                      ch = input[this.cursor++];
                      if (ch === undefined)
                          throw this.newSyntaxError("Unterminated comment");
  
                      if (ch === '*') {
                          next = input[this.cursor];
                          if (next === '/') {
                              this.cursor++;
                              break;
                          }
                      } else if (ch === '\n') {
                          this.lineno++;
                      }
                  }
              } else if (ch === '/' && next === '/') {
                  this.cursor++;
                  for (;;) {
                      ch = input[this.cursor++];
                      if (ch === undefined)
                          return;
  
                      if (ch === '\n') {
                          this.lineno++;
                          break;
                      }
                  }
              } else if (ch !== ' ' && ch !== '\t') {
                  this.cursor--;
                  return;
              }
          }
      }
func_documentation_string: Eat comments and whitespace.