diff options
author | Mike Kucera | 2007-06-07 13:57:38 +0000 |
---|---|---|
committer | Mike Kucera | 2007-06-07 13:57:38 +0000 |
commit | 2b6e354084c1a545cd20c6f59e620ca8ae299165 (patch) | |
tree | d0d178f960b6e65b0dccb407493fa177a243a37e /upc | |
parent | 398742f0b81fdef61db5c35b6f1ca5bc71ccd104 (diff) | |
download | org.eclipse.cdt-2b6e354084c1a545cd20c6f59e620ca8ae299165.tar.gz org.eclipse.cdt-2b6e354084c1a545cd20c6f59e620ca8ae299165.tar.xz org.eclipse.cdt-2b6e354084c1a545cd20c6f59e620ca8ae299165.zip |
bug #191121, fix perfomance problems in C99 parser by making the parser object a singleton
Diffstat (limited to 'upc')
-rw-r--r-- | upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCParser.java | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCParser.java b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCParser.java index a90b6181aed..25690f169d2 100644 --- a/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCParser.java +++ b/upc/org.eclipse.cdt.core.parser.upc/src/org/eclipse/cdt/internal/core/dom/parser/upc/UPCParser.java @@ -91,7 +91,7 @@ public class UPCParser extends PrsStream implements RuleAction , IParserActionTo for (int i = 0; i < unimplemented_symbols.size(); i++) { Integer id = (Integer) unimplemented_symbols.get(i); - System.out.println(" " + UPCParsersym.orderedTerminalSymbols[id.intValue()]);//$NON-NLS-1$ + System.out.println(" " + UPCParsersym.orderedTerminalSymbols[id.intValue()]);//$NON-NLS-1$ } System.out.println(); } @@ -172,9 +172,9 @@ public class UPCParser extends PrsStream implements RuleAction , IParserActionTo } -private UPCParserAction action = new UPCParserAction (this, UPCParserprs.orderedTerminalSymbols); +private UPCParserAction action = null; +private List commentTokens = null; private IKeywordMap keywordMap = new UPCKeywordMap (); -private List commentTokens = new ArrayList(); public UPCParser() { // constructor this(new C99Lexer() { @@ -205,11 +205,36 @@ public List getCommentTokens() { return commentTokens; } +public void resetTokenStream() { + super.resetTokenStream(); + action = new UPCParserAction (this, UPCParserprs.orderedTerminalSymbols); + commentTokens = new ArrayList(); +} + + public IParseResult parse() { // this has to be done, or... kaboom! setStreamLength(getSize()); - // do the actual parsing, -1 means full error handling - parser(null, -1); + + final int errorRepairCount = -1; // -1 means full error handling + + if(btParser == null) { + parser(null, errorRepairCount); + } + else { + try + { + // reuse the same btParser object for speed + // (creating an new instance for every translation unit is dirt slow) + btParser.parse(errorRepairCount); + } + catch (BadParseException e) + { + reset(e.error_token); // point to error token + DiagnoseParser diagnoseParser = new DiagnoseParser(this, prs); + diagnoseParser.diagnose(e.error_token); + } + } IASTTranslationUnit tu = action.getAST(); boolean encounteredError = action.encounteredError(); |