whole_func_string: function() {
      const text = this.text();
      let result = this.ast.prepare(
        text.substring(0, 2) === "/*" ? "commentblock" : "commentline",
        null,
        this
      );
      const offset = this.lexer.yylloc.first_offset;
      // handle location on comment
      const prev = this.prev;
      this.prev = [
        this.lexer.yylloc.last_line,
        this.lexer.yylloc.last_column,
        this.lexer.offset
      ];
      this.lex();
      result = result(text);
      result.offset = offset;
      this.prev = prev;
      return result;
    }
func_code_string: function() {
      const text = this.text();
      let result = this.ast.prepare(
        text.substring(0, 2) === "/*" ? "commentblock" : "commentline",
        null,
        this
      );
      const offset = this.lexer.yylloc.first_offset;
      // handle location on comment
      const prev = this.prev;
      this.prev = [
        this.lexer.yylloc.last_line,
        this.lexer.yylloc.last_column,
        this.lexer.offset
      ];
      this.lex();
      result = result(text);
      result.offset = offset;
      this.prev = prev;
      return result;
    }
func_documentation_string: Comments with // or # or / * ... * /