diff options
author | Markus Schorn | 2007-11-13 15:14:35 +0000 |
---|---|---|
committer | Markus Schorn | 2007-11-13 15:14:35 +0000 |
commit | 880c51737f74acc3b31569f2fe1a790048f46d16 (patch) | |
tree | 2dda74da9cc31be24bd461d33908d00e4500e404 | |
parent | 617af779928a5068af0abffbf2d938e0f2b5fe33 (diff) | |
download | org.eclipse.cdt-880c51737f74acc3b31569f2fe1a790048f46d16.tar.gz org.eclipse.cdt-880c51737f74acc3b31569f2fe1a790048f46d16.tar.xz org.eclipse.cdt-880c51737f74acc3b31569f2fe1a790048f46d16.zip |
Performance Improvement for the CPreprocessor, avoid calling some methods on IIndexMacros.
6 files changed, 56 insertions, 34 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/LocationMapTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/LocationMapTests.java index bb684f4e55e..0bc4dd866ab 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/LocationMapTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/LocationMapTests.java @@ -50,6 +50,35 @@ import org.eclipse.cdt.internal.core.parser.scanner.ImageLocationInfo; import org.eclipse.cdt.internal.core.parser.scanner.LocationMap; public class LocationMapTests extends BaseTestCase { + public class Loc implements IASTFileLocation { + private String fFile; + private int fOffset; + private int fEndOffset; + public Loc(String file, int offset, int endOffset) { + fFile= file; + fOffset= offset; + fEndOffset= endOffset; + } + public int getEndingLineNumber() { + return 0; + } + public String getFileName() { + return fFile; + } + public int getNodeLength() { + return fEndOffset-fOffset; + } + public int getNodeOffset() { + return fOffset; + } + public int getStartingLineNumber() { + return 0; + } + public IASTFileLocation asFileLocation() { + return this; + } + } + private static final String FN = "filename"; private static final int ROLE_DEFINITION = IASTNameOwner.r_definition; private static final int ROLE_UNCLEAR = IASTNameOwner.r_unclear; @@ -419,8 +448,8 @@ public class LocationMapTests extends BaseTestCase { final String[] params = new String[]{"p1", "p2"}; IMacroBinding macro2= new TestMacro("n2", "exp2", params); init(DIGITS); - fLocationMap.registerMacroFromIndex(macro1, "fidx1", 0, 0, 0); - fLocationMap.registerMacroFromIndex(macro2, "fidx2", 1, 4, 8); + fLocationMap.registerMacroFromIndex(macro1, new Loc("fidx1", 0, 0), 0); + fLocationMap.registerMacroFromIndex(macro2, new Loc("fidx2", 1, 4), 8); IASTPreprocessorMacroDefinition[] prep= fLocationMap.getBuiltinMacroDefinitions(); assertEquals(2, prep.length); checkMacroDefinition(prep[0], macro1, "", "n1", "n1", "exp1", null, "fidx1", -1, 0, 0, 0, 0); @@ -447,7 +476,7 @@ public class LocationMapTests extends BaseTestCase { assertEquals(1, fLocationMap.getCurrentLineNumber('\n')); assertEquals(2, fLocationMap.getCurrentLineNumber('\n'+1)); fLocationMap.registerPredefinedMacro(macro1); - fLocationMap.registerMacroFromIndex(macro2, "ifile", 2, 12, 32); + fLocationMap.registerMacroFromIndex(macro2, new Loc("ifile", 2, 12), 32); fLocationMap.encounterPoundDefine(3, 13, 33, 63, 103, macro3); IASTName name1= fLocationMap.encounterImplicitMacroExpansion(macro1, null); IASTName name2= fLocationMap.encounterImplicitMacroExpansion(macro2, null); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java index 89183879a89..e96fa238fa9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java @@ -79,16 +79,11 @@ class ASTPreprocessorDefinition extends ASTPreprocessorName { class ASTBuiltinName extends ASTPreprocessorDefinition { - private final ASTFileLocationForBuiltins fFileLocation; + private final IASTFileLocation fFileLocation; - public ASTBuiltinName(IASTNode parent, ASTNodeProperty property, String filename, int nameOffset, int nameEndOffset, char[] name, IBinding binding) { + public ASTBuiltinName(IASTNode parent, ASTNodeProperty property, IASTFileLocation floc, char[] name, IBinding binding) { super(parent, property, -1, -1, name, binding); - if (filename != null) { - fFileLocation= new ASTFileLocationForBuiltins(filename, nameOffset, nameEndOffset-nameOffset); - } - else { - fFileLocation= null; - } + fFileLocation= floc; } public boolean contains(IASTNode node) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java index b412796ebf4..0b49a4ee68d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java @@ -266,7 +266,7 @@ class ASTInclusionStatement extends ASTPreprocessorNode implements IASTPreproces } } -class ASTMacro extends ASTPreprocessorNode implements IASTPreprocessorObjectStyleMacroDefinition { +class ASTObjectStyleMacroDefinition extends ASTPreprocessorNode implements IASTPreprocessorObjectStyleMacroDefinition { private final ASTPreprocessorName fName; private final int fExpansionNumber; private final int fExpansionOffset; @@ -274,7 +274,7 @@ class ASTMacro extends ASTPreprocessorNode implements IASTPreprocessorObjectStyl /** * Regular constructor. */ - public ASTMacro(IASTTranslationUnit parent, IMacroBinding macro, + public ASTObjectStyleMacroDefinition(IASTTranslationUnit parent, IMacroBinding macro, int startNumber, int nameNumber, int nameEndNumber, int expansionNumber, int endNumber) { super(parent, IASTTranslationUnit.PREPROCESSOR_STATEMENT, startNumber, endNumber); fExpansionNumber= expansionNumber; @@ -286,9 +286,9 @@ class ASTMacro extends ASTPreprocessorNode implements IASTPreprocessorObjectStyl * Constructor for built-in macros * @param expansionOffset */ - public ASTMacro(IASTTranslationUnit parent, IMacroBinding macro, String filename, int nameOffset, int nameEndOffset, int expansionOffset) { + public ASTObjectStyleMacroDefinition(IASTTranslationUnit parent, IMacroBinding macro, IASTFileLocation floc, int expansionOffset) { super(parent, IASTTranslationUnit.PREPROCESSOR_STATEMENT, -1, -1); - fName= new ASTBuiltinName(this, IASTPreprocessorMacroDefinition.MACRO_NAME, filename, nameOffset, nameEndOffset, macro.getNameCharArray(), macro); + fName= new ASTBuiltinName(this, IASTPreprocessorMacroDefinition.MACRO_NAME, floc, macro.getNameCharArray(), macro); fExpansionNumber= -1; fExpansionOffset= expansionOffset; } @@ -356,11 +356,11 @@ class ASTMacroParameter extends ASTPreprocessorNode implements IASTFunctionStyle public void setParameter(String value) {assert false;} } -class ASTFunctionMacro extends ASTMacro implements IASTPreprocessorFunctionStyleMacroDefinition { +class ASTFunctionStyleMacroDefinition extends ASTObjectStyleMacroDefinition implements IASTPreprocessorFunctionStyleMacroDefinition { /** * Regular constructor. */ - public ASTFunctionMacro(IASTTranslationUnit parent, IMacroBinding macro, + public ASTFunctionStyleMacroDefinition(IASTTranslationUnit parent, IMacroBinding macro, int startNumber, int nameNumber, int nameEndNumber, int expansionNumber, int endNumber) { super(parent, macro, startNumber, nameNumber, nameEndNumber, expansionNumber, endNumber); } @@ -368,9 +368,9 @@ class ASTFunctionMacro extends ASTMacro implements IASTPreprocessorFunctionStyle /** * Constructor for builtins */ - public ASTFunctionMacro(IASTTranslationUnit parent, IMacroBinding macro, - String filename, int nameOffset, int nameEndOffset, int expansionOffset) { - super(parent, macro, filename, nameOffset, nameEndOffset, expansionOffset); + public ASTFunctionStyleMacroDefinition(IASTTranslationUnit parent, IMacroBinding macro, + IASTFileLocation nameLoc, int expansionOffset) { + super(parent, macro, nameLoc, expansionOffset); } public IASTFunctionStyleMacroParameter[] getParameters() { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java index e7109add0e4..9480f688d81 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java @@ -817,9 +817,7 @@ public class CPreprocessor implements ILexerLog, IScanner { try { PreprocessorMacro result= fMacroDefinitionParser.parseMacroDefinition(macro.getName(), macro.getParameterList(), macro.getExpansion()); final IASTFileLocation loc= macro.getFileLocation(); - int offset= loc.getNodeOffset(); - int endOffset= offset + loc.getNodeLength(); - fLocationMap.registerMacroFromIndex(result, loc.getFileName(), offset, endOffset, -1); + fLocationMap.registerMacroFromIndex(result, loc, -1); fMacroDictionary.put(result.getNameCharArray(), result); } catch (Exception e) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LocationMap.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LocationMap.java index c3f4f3ae928..a6886529b4b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LocationMap.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LocationMap.java @@ -59,20 +59,20 @@ public class LocationMap implements ILocationResolver { public void registerPredefinedMacro(IMacroBinding macro) { - registerPredefinedMacro(macro, null, -1, -1, -1); + registerPredefinedMacro(macro, null, -1); } - public void registerMacroFromIndex(IMacroBinding macro, String filename, int nameOffset, int nameEndOffset, int expansionOffset) { - registerPredefinedMacro(macro, filename, nameOffset, nameEndOffset, expansionOffset); + public void registerMacroFromIndex(IMacroBinding macro, IASTFileLocation nameLocation, int expansionOffset) { + registerPredefinedMacro(macro, nameLocation, expansionOffset); } - private void registerPredefinedMacro(IMacroBinding macro, String filename, int nameOffset, int nameEndOffset, int expansionOffset) { - ASTMacro astmacro; + private void registerPredefinedMacro(IMacroBinding macro, IASTFileLocation nameloc, int expansionOffset) { + ASTObjectStyleMacroDefinition astmacro; if (macro.isFunctionStyle()) { - astmacro= new ASTFunctionMacro(fTranslationUnit, macro, filename, nameOffset, nameEndOffset, expansionOffset); + astmacro= new ASTFunctionStyleMacroDefinition(fTranslationUnit, macro, nameloc, expansionOffset); } else { - astmacro= new ASTMacro(fTranslationUnit, macro, filename, nameOffset, nameEndOffset, expansionOffset); + astmacro= new ASTObjectStyleMacroDefinition(fTranslationUnit, macro, nameloc, expansionOffset); } fBuiltinMacros.add(astmacro); } @@ -294,10 +294,10 @@ public class LocationMap implements ILocationResolver { endOffset= getSequenceNumberForOffset(endOffset); ASTPreprocessorNode astMacro; if (!macrodef.isFunctionStyle()) { - astMacro= new ASTMacro(fTranslationUnit, macrodef, startOffset, nameOffset, nameEndOffset, expansionOffset, endOffset); + astMacro= new ASTObjectStyleMacroDefinition(fTranslationUnit, macrodef, startOffset, nameOffset, nameEndOffset, expansionOffset, endOffset); } else { - astMacro= new ASTFunctionMacro(fTranslationUnit, macrodef, startOffset, nameOffset, nameEndOffset, expansionOffset, endOffset); + astMacro= new ASTFunctionStyleMacroDefinition(fTranslationUnit, macrodef, startOffset, nameOffset, nameEndOffset, expansionOffset, endOffset); } fDirectives.add(astMacro); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java index 4b1407f7bb8..a9da78a16a6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java @@ -425,8 +425,8 @@ public class PDOMASTAdapter { * Otherwise if the provided name is not empty, it is returned unchanged. */ public static IASTName getAdapterIfAnonymous(IASTName name) { - if (name.getFileLocation() == null) { - if (name.toCharArray().length == 0) { + if (name.toCharArray().length == 0) { + if (name.getFileLocation() == null) { IASTNode parent= name.getParent(); if (parent != null) { IASTFileLocation loc= parent.getFileLocation(); |