From 06c73c157d8411baa9c54ba0d2db7d28efcbdc04 Mon Sep 17 00:00:00 2001 From: Jeff Williams Date: Sun, 1 Jul 2012 16:26:09 -0700 Subject: [PATCH] fix parser.js so it doesn't throw exceptions when parsing itself --- rhino_modules/jsdoc/src/parser.js | 12 +++--------- test/specs/jsdoc/src/parser.js | 12 ++++++++++++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/rhino_modules/jsdoc/src/parser.js b/rhino_modules/jsdoc/src/parser.js index 81dda599..18f4173d 100644 --- a/rhino_modules/jsdoc/src/parser.js +++ b/rhino_modules/jsdoc/src/parser.js @@ -143,17 +143,11 @@ function pretreat(code) { // make starbangstar comments look like real jsdoc comments .replace(/\/\*\!\*/g, '/**') - // make matching comment endings easier - .replace(/\*\//g, '»') - // merge adjacent doclets - .replace(/»\/\*\*+/g, '@also') + .replace(/\*\/\/\*\*+/g, '@also') // make lent objectliterals documentable by giving them a dummy name - .replace(/(\/\*\*[^»]*?@lends\b[^»]*?»\s*)\{/g, '$1 ____ = {') // like return @lends { - .replace(/(\/\*\*[^»]*?@lends\b[^»]*?»)(\s*)return(\s*)\{/g, '$2$3 return $1 ____ = {') // like @lends return { - - // make matching comment endings harder - .replace(/»/g, '*/'); + .replace(/(\/\*\*[^\*\/]*?@lends\b[^\*\/]*?\*\/\s*)\{/g, '$1 ____ = {') // like return @lends { + .replace(/(\/\*\*[^\*\/]*?@lends\b[^\*\/]*?\*\/)(\s*)return(\s*)\{/g, '$2$3 return $1 ____ = {'); // like @lends return { } var tkn = { NAMEDFUNCTIONSTATEMENT: -1001 }; diff --git a/test/specs/jsdoc/src/parser.js b/test/specs/jsdoc/src/parser.js index f0fdd8f9..113c96d7 100644 --- a/test/specs/jsdoc/src/parser.js +++ b/test/specs/jsdoc/src/parser.js @@ -39,6 +39,18 @@ describe("jsdoc/src/parser", function() { parser.on('symbolFound', spy).parse(sourceCode); expect(spy).toHaveBeenCalled(); }); + + it("should be able to parse its own source file", function() { + var fs = require("fs"), + path = require("path"), + parserSrc = "javascript:" + fs.readFileSync( path.join(__dirname, + "rhino_modules", "jsdoc", "src", "parser.js") ), + parse = function() { + parser.parse(parserSrc); + }; + + expect(parse).not.toThrow(); + }); }); }); }); \ No newline at end of file