Skip to main content
summaryrefslogtreecommitdiffstats
path: root/upc
diff options
context:
space:
mode:
authorMike Kucera2007-06-07 13:57:38 +0000
committerMike Kucera2007-06-07 13:57:38 +0000
commit2b6e354084c1a545cd20c6f59e620ca8ae299165 (patch)
treed0d178f960b6e65b0dccb407493fa177a243a37e /upc
parent398742f0b81fdef61db5c35b6f1ca5bc71ccd104 (diff)
downloadorg.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.java35
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();

Back to the top