1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-30 04:15:35 +02:00

Added getFilename() to IToken, ITokenDuple & IASTOffsetableNamedElement.

This improves the accuracy of selection search w/the new scanner (and without).
This commit is contained in:
John Camelon 2004-07-22 18:38:26 +00:00
parent 49b74b0eea
commit 12268e9104
80 changed files with 1039 additions and 650 deletions

View file

@ -58,6 +58,7 @@ import org.eclipse.cdt.internal.core.parser.scanner2.ObjectMap;
*/ */
public class ParserSymbolTableTest extends TestCase { public class ParserSymbolTableTest extends TestCase {
private static final char[] EMPTY_CHAR_ARRAY = "".toCharArray();
public ParserSymbolTable table = null; public ParserSymbolTable table = null;
public TypeInfoProvider provider = null; public TypeInfoProvider provider = null;
@ -2934,15 +2935,15 @@ public class ParserSymbolTableTest extends TestCase {
ISymbolASTExtension cuExtension = new StandardSymbolExtension( table.getCompilationUnit(), (ASTSymbol) compUnit ); ISymbolASTExtension cuExtension = new StandardSymbolExtension( table.getCompilationUnit(), (ASTSymbol) compUnit );
table.getCompilationUnit().setASTExtension( cuExtension ); table.getCompilationUnit().setASTExtension( cuExtension );
IASTClassSpecifier clsSpec = new ASTClassSpecifier( A, ASTClassKind.CLASS, ClassNameType.IDENTIFIER, ASTAccessVisibility.PUBLIC, 0, 0, 0, 0, 0, new ArrayList( ) ); IASTClassSpecifier clsSpec = new ASTClassSpecifier( A, ASTClassKind.CLASS, ClassNameType.IDENTIFIER, ASTAccessVisibility.PUBLIC, 0, 0, 0, 0, 0, new ArrayList( ), EMPTY_CHAR_ARRAY ); //$NON-NLS-1$
ISymbolASTExtension clsExtension = new StandardSymbolExtension( A, (ASTSymbol) clsSpec ); ISymbolASTExtension clsExtension = new StandardSymbolExtension( A, (ASTSymbol) clsSpec );
A.setASTExtension( clsExtension ); A.setASTExtension( clsExtension );
IASTField field = new ASTField(i, null, null, null, 0, 0, 0, 0, 0, new ArrayList(), false, null, ASTAccessVisibility.PUBLIC ); IASTField field = new ASTField(i, null, null, null, 0, 0, 0, 0, 0, new ArrayList(), false, null, ASTAccessVisibility.PUBLIC, EMPTY_CHAR_ARRAY );
ISymbolASTExtension extension = new StandardSymbolExtension( i, (ASTSymbol) field ); ISymbolASTExtension extension = new StandardSymbolExtension( i, (ASTSymbol) field );
i.setASTExtension( extension ); i.setASTExtension( extension );
field = new ASTField(i, null, null, null, 0, 0, 0, 0, 0, new ArrayList(), false, null, ASTAccessVisibility.PRIVATE ); field = new ASTField(i, null, null, null, 0, 0, 0, 0, 0, new ArrayList(), false, null, ASTAccessVisibility.PRIVATE, EMPTY_CHAR_ARRAY );
extension = new StandardSymbolExtension( j, (ASTSymbol) field ); extension = new StandardSymbolExtension( j, (ASTSymbol) field );
j.setASTExtension( extension ); j.setASTExtension( extension );

View file

@ -16,11 +16,12 @@ package org.eclipse.cdt.core.parser;
*/ */
public class BacktrackException extends Exception public class BacktrackException extends Exception
{ {
private static final char [] EMPTY_CHARARRAY = "".toCharArray(); //$NON-NLS-1$
private IProblem problem; private IProblem problem;
private int startOffset; private int startOffset;
private int endOffset; private int endOffset;
private int lineNumber; private int lineNumber;
private char[] filename;
/** /**
* @param p * @param p
@ -37,6 +38,7 @@ public class BacktrackException extends Exception
problem = null; problem = null;
startOffset = 0; startOffset = 0;
endOffset = 0; endOffset = 0;
filename = EMPTY_CHARARRAY;
} }
/** /**
* @return Returns the problem. * @return Returns the problem.
@ -48,12 +50,14 @@ public class BacktrackException extends Exception
/** /**
* @param startingOffset * @param startingOffset
* @param endingOffset * @param endingOffset
* @param f TODO
*/ */
public void initialize(int startingOffset, int endingOffset, int line) { public void initialize(int startingOffset, int endingOffset, int line, char[] f) {
reset(); reset();
startOffset = startingOffset; startOffset = startingOffset;
endOffset = endingOffset; endOffset = endingOffset;
lineNumber = line; lineNumber = line;
this.filename = f;
} }
/** /**
* @return Returns the offset. * @return Returns the offset.
@ -74,4 +78,11 @@ public class BacktrackException extends Exception
public int getLineNumber() { public int getLineNumber() {
return lineNumber; return lineNumber;
} }
/**
* @return
*/
public char[] getFilename() {
return filename;
}
} }

View file

@ -19,32 +19,35 @@ import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel; import java.nio.channels.FileChannel;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import org.eclipse.cdt.internal.core.parser.scanner2.CharArrayUtils;
/** /**
* @author jcamelon * @author jcamelon
*/ */
public class CodeReader { public class CodeReader {
private static final String UTF_8 = "UTF-8"; //$NON-NLS-1$ private static final String UTF_8 = "UTF-8"; //$NON-NLS-1$
private static final String NOFILE = "<text>"; //$NON-NLS-1$ private static final String NF = "<text>"; //$NON-NLS-1$
private static final char [] NOFILE = NF.toCharArray(); //$NON-NLS-1$
public final char[] buffer; public final char[] buffer;
public final String filename; public final char[] filename;
// If you already have preloaded the buffer, e.g. working copy // If you already have preloaded the buffer, e.g. working copy
public CodeReader(String filename, char[] buffer) { public CodeReader(String filename, char[] buffer) {
this.filename = filename; this.filename = filename.toCharArray();
this.buffer = buffer; this.buffer = buffer;
} }
// If you are just scanning a string // If you are just scanning a string
public CodeReader(char[] buffer) { public CodeReader(char[] buffer) {
this(NOFILE, buffer); this(NF, buffer);
} }
// If you are loading up a file normally // If you are loading up a file normally
public CodeReader(String filename) throws IOException public CodeReader(String filename) throws IOException
{ {
this.filename = filename; this.filename = filename.toCharArray();
FileInputStream stream = new FileInputStream(filename); FileInputStream stream = new FileInputStream(filename);
try { try {
@ -56,7 +59,7 @@ public class CodeReader {
// If you have a handle on a stream to the file, e.g. IFile.getContents() // If you have a handle on a stream to the file, e.g. IFile.getContents()
public CodeReader(String filename, InputStream stream) throws IOException { public CodeReader(String filename, InputStream stream) throws IOException {
this.filename = filename; this.filename = filename.toCharArray();
FileInputStream fstream = FileInputStream fstream =
(stream instanceof FileInputStream) (stream instanceof FileInputStream)
@ -107,7 +110,7 @@ public class CodeReader {
} }
public boolean isFile() { public boolean isFile() {
return filename != NOFILE; return !CharArrayUtils.equals( filename, NOFILE );
} }
} }

View file

@ -1,22 +0,0 @@
/*******************************************************************************
* Copyright (c) 2003, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corp. - Rational Software - initial implementation
*******************************************************************************/
package org.eclipse.cdt.core.parser;
/**
* @author jcamelon
*/
public interface IFilenameProvider {
public char [] getCurrentFilename();
public int getCurrentFileIndex();
public String getFilenameForIndex( int index );
}

View file

@ -1,22 +0,0 @@
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.core.parser;
/**
* @author jcamelon
*
*/
public interface IPreprocessor extends IScanner {
public void process();
}

View file

@ -19,7 +19,7 @@ import org.eclipse.cdt.internal.core.parser.scanner.IScannerContext;
* @author jcamelon * @author jcamelon
* *
*/ */
public interface IScanner extends IFilenameProvider { public interface IScanner {
public static final String __CPLUSPLUS = "__cplusplus"; //$NON-NLS-1$ public static final String __CPLUSPLUS = "__cplusplus"; //$NON-NLS-1$
public static final String __STDC_VERSION__ = "__STDC_VERSION__"; //$NON-NLS-1$ public static final String __STDC_VERSION__ = "__STDC_VERSION__"; //$NON-NLS-1$

View file

@ -21,6 +21,7 @@ public interface IToken {
public int getType(); public int getType();
public String getImage(); public String getImage();
public char [] getCharImage(); public char [] getCharImage();
public char [] getFilename();
public int getOffset(); public int getOffset();
public int getLength(); public int getLength();
public int getEndOffset(); public int getEndOffset();

View file

@ -38,6 +38,9 @@ public interface ITokenDuple {
public abstract Iterator iterator(); public abstract Iterator iterator();
public abstract String toString(); public abstract String toString();
public char [] toCharArray(); public char [] toCharArray();
public char [] getFilename();
public abstract boolean isIdentifier(); public abstract boolean isIdentifier();
public abstract int length(); public abstract int length();

View file

@ -44,14 +44,14 @@ public class ParserFactory {
private static IParserExtensionFactory extensionFactory = new ParserExtensionFactory( ExtensionDialect.GCC ); private static IParserExtensionFactory extensionFactory = new ParserExtensionFactory( ExtensionDialect.GCC );
public static IASTFactory createASTFactory( IFilenameProvider provider, ParserMode mode, ParserLanguage language ) public static IASTFactory createASTFactory( ParserMode mode, ParserLanguage language )
{ {
if( mode == ParserMode.QUICK_PARSE ) if( mode == ParserMode.QUICK_PARSE )
return new QuickParseASTFactory(extensionFactory.createASTExtension( mode )); return new QuickParseASTFactory(extensionFactory.createASTExtension( mode ));
else if( mode == ParserMode.EXPRESSION_PARSE ) else if( mode == ParserMode.EXPRESSION_PARSE )
return new ExpressionParseASTFactory( extensionFactory.createASTExtension( mode )); return new ExpressionParseASTFactory( extensionFactory.createASTExtension( mode ));
else else
return new CompleteParseASTFactory( provider, language, mode, extensionFactory.createASTExtension( mode )); return new CompleteParseASTFactory( language, mode, extensionFactory.createASTExtension( mode ));
} }

View file

@ -28,7 +28,7 @@ public interface IASTFactory
String name, String name,
int startingOffset, int startingOffset,
int startingLine, int startingLine,
int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, IMacroDescriptor info); int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, IMacroDescriptor info, char[] fn);
public IASTInclusion createInclusion( public IASTInclusion createInclusion(
String name, String name,
@ -36,7 +36,7 @@ public interface IASTFactory
boolean local, boolean local,
int startingOffset, int startingOffset,
int startingLine, int startingLine,
int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine) ; int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn) ;
public IASTUsingDirective createUsingDirective( public IASTUsingDirective createUsingDirective(
IASTScope scope, IASTScope scope,
@ -52,13 +52,13 @@ public interface IASTFactory
IASTScope scope, IASTScope scope,
String assembly, String assembly,
int startingOffset, int startingOffset,
int startingLine, int endingOffset, int endingLine); int startingLine, int endingOffset, int endingLine, char[] fn);
public IASTNamespaceDefinition createNamespaceDefinition( public IASTNamespaceDefinition createNamespaceDefinition(
IASTScope scope, IASTScope scope,
String identifier, String identifier,
int startingOffset, int startingOffset,
int startingLine, int nameOffset, int nameEndOffset, int nameLineNumber) throws ASTSemanticException; int startingLine, int nameOffset, int nameEndOffset, int nameLineNumber, char[] fn) throws ASTSemanticException;
public IASTNamespaceAlias createNamespaceAlias( public IASTNamespaceAlias createNamespaceAlias(
IASTScope scope, IASTScope scope,
@ -72,7 +72,7 @@ public interface IASTFactory
public IASTLinkageSpecification createLinkageSpecification( public IASTLinkageSpecification createLinkageSpecification(
IASTScope scope, IASTScope scope,
String spec, int startingOffset, int startingLine) ; String spec, int startingOffset, int startingLine, char[] fn) ;
public IASTClassSpecifier createClassSpecifier( public IASTClassSpecifier createClassSpecifier(
IASTScope scope, IASTScope scope,
@ -81,7 +81,7 @@ public interface IASTFactory
ClassNameType type, ClassNameType type,
ASTAccessVisibility access, ASTAccessVisibility access,
int startingOffset, int startingOffset,
int startingLine, int nameOffset, int nameEndOffset, int nameLine) throws ASTSemanticException; int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn) throws ASTSemanticException;
/** /**
* @param astClassSpec * @param astClassSpec
@ -104,13 +104,13 @@ public interface IASTFactory
public IASTEnumerationSpecifier createEnumerationSpecifier( public IASTEnumerationSpecifier createEnumerationSpecifier(
IASTScope scope, IASTScope scope,
String name, String name,
int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine) throws ASTSemanticException; int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn) throws ASTSemanticException;
public IASTEnumerator addEnumerator( public IASTEnumerator addEnumerator(
IASTEnumerationSpecifier enumeration, IASTEnumerationSpecifier enumeration,
String string, String string,
int startingOffset, int startingOffset,
int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue)throws ASTSemanticException; int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue, char[] fn)throws ASTSemanticException;
public IASTExpression createExpression( public IASTExpression createExpression(
IASTScope scope, IASTScope scope,
@ -201,25 +201,25 @@ public interface IASTFactory
boolean isVirtual, boolean isExplicit, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean isDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments) throws ASTSemanticException; boolean isVirtual, boolean isExplicit, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean isDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments) throws ASTSemanticException;
public IASTVariable createVariable(IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, public IASTVariable createVariable(IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression,
IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression ) throws ASTSemanticException; IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, char[] fn ) throws ASTSemanticException;
public IASTField createField( IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility) throws ASTSemanticException; public IASTField createField( IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility, char[] fn) throws ASTSemanticException;
public IASTDesignator createDesignator( IASTDesignator.DesignatorKind kind, IASTExpression constantExpression, IToken fieldIdentifier, Map extensionParms ); public IASTDesignator createDesignator( IASTDesignator.DesignatorKind kind, IASTExpression constantExpression, IToken fieldIdentifier, Map extensionParms );
public IASTParameterDeclaration createParameterDeclaration( boolean isConst, boolean isVolatile, IASTTypeSpecifier getTypeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) ; public IASTParameterDeclaration createParameterDeclaration( boolean isConst, boolean isVolatile, IASTTypeSpecifier getTypeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn ) ;
public IASTTemplateDeclaration createTemplateDeclaration( IASTScope scope, List templateParameters, boolean exported, int startingOffset, int startingLine ) throws ASTSemanticException; public IASTTemplateDeclaration createTemplateDeclaration( IASTScope scope, List templateParameters, boolean exported, int startingOffset, int startingLine, char[] fn ) throws ASTSemanticException;
public IASTTemplateParameter createTemplateParameter( IASTTemplateParameter.ParamKind kind, String identifier, IASTTypeId defaultValue, IASTParameterDeclaration parameter, List parms, IASTCodeScope parameterScope, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) throws ASTSemanticException; public IASTTemplateParameter createTemplateParameter( IASTTemplateParameter.ParamKind kind, String identifier, IASTTypeId defaultValue, IASTParameterDeclaration parameter, List parms, IASTCodeScope parameterScope, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn ) throws ASTSemanticException;
public IASTTemplateInstantiation createTemplateInstantiation(IASTScope scope, int startingOffset, int startingLine); public IASTTemplateInstantiation createTemplateInstantiation(IASTScope scope, int startingOffset, int startingLine, char[] fn);
public IASTTemplateSpecialization createTemplateSpecialization(IASTScope scope, int startingOffset, int startingLine); public IASTTemplateSpecialization createTemplateSpecialization(IASTScope scope, int startingOffset, int startingLine, char[] fn);
public IASTTypedefDeclaration createTypedef( IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) throws ASTSemanticException; public IASTTypedefDeclaration createTypedef( IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn ) throws ASTSemanticException;
public IASTAbstractTypeSpecifierDeclaration createTypeSpecDeclaration( IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend ); public IASTAbstractTypeSpecifierDeclaration createTypeSpecDeclaration( IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend, char[] fn );
public boolean queryIsTypeName( IASTScope scope, ITokenDuple nameInQuestion ) ; public boolean queryIsTypeName( IASTScope scope, ITokenDuple nameInQuestion ) ;

View file

@ -25,4 +25,6 @@ public interface IASTOffsetableElement {
public int getStartingLine(); public int getStartingLine();
public int getEndingLine(); public int getEndingLine();
public char [] getFilename();
} }

View file

@ -70,7 +70,7 @@ public class CompleteParser extends Parser {
* @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setupASTFactory(org.eclipse.cdt.core.parser.IScanner, org.eclipse.cdt.core.parser.ParserLanguage) * @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setupASTFactory(org.eclipse.cdt.core.parser.IScanner, org.eclipse.cdt.core.parser.ParserLanguage)
*/ */
protected void setupASTFactory(IScanner scanner, ParserLanguage language) { protected void setupASTFactory(IScanner scanner, ParserLanguage language) {
astFactory = ParserFactory.createASTFactory( this, ParserMode.COMPLETE_PARSE, language); astFactory = ParserFactory.createASTFactory( ParserMode.COMPLETE_PARSE, language);
scanner.setASTFactory(astFactory); scanner.setASTFactory(astFactory);
astFactory.setLogger(log); astFactory.setLogger(log);
} }

View file

@ -136,7 +136,7 @@ public class CompletionParser extends ContextualParser implements IParser {
if( LT(1) != IToken.t_catch ) if( LT(1) != IToken.t_catch )
{ {
IToken la = LA(1); IToken la = LA(1);
throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber()); // error, need at least one of these throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber(), la.getFilename()); // error, need at least one of these
} }
while (LT(1) == IToken.t_catch) while (LT(1) == IToken.t_catch)
{ {
@ -167,7 +167,7 @@ public class CompletionParser extends ContextualParser implements IParser {
* @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setupASTFactory(org.eclipse.cdt.core.parser.IScanner, org.eclipse.cdt.core.parser.ParserLanguage) * @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setupASTFactory(org.eclipse.cdt.core.parser.IScanner, org.eclipse.cdt.core.parser.ParserLanguage)
*/ */
protected void setupASTFactory(IScanner scanner, ParserLanguage language) { protected void setupASTFactory(IScanner scanner, ParserLanguage language) {
astFactory = ParserFactory.createASTFactory( this, ParserMode.COMPLETION_PARSE, language); astFactory = ParserFactory.createASTFactory( ParserMode.COMPLETION_PARSE, language);
scanner.setASTFactory(astFactory); scanner.setASTFactory(astFactory);
astFactory.setLogger(log); astFactory.setLogger(log);
} }

View file

@ -109,16 +109,18 @@ public class DeclarationWrapper implements IDeclaratorOwner
/** /**
* @param scope * @param scope
* @param filename TODO
*/ */
public DeclarationWrapper( public DeclarationWrapper(
IASTScope scope, IASTScope scope,
int startingOffset, int startingOffset,
int startingLine, IASTTemplate templateDeclaration) int startingLine, IASTTemplate templateDeclaration, char[] filename)
{ {
this.scope = scope; this.scope = scope;
this.startingOffset = startingOffset; this.startingOffset = startingOffset;
this.startingLine = startingLine; this.startingLine = startingLine;
this.templateDeclaration = templateDeclaration; this.templateDeclaration = templateDeclaration;
this.fn = filename;
} }
/** /**
* @param b * @param b
@ -333,6 +335,8 @@ public class DeclarationWrapper implements IDeclaratorOwner
} }
private IASTFactory astFactory = null; private IASTFactory astFactory = null;
private int endLine; private int endLine;
private char[] fn;
/** /**
* @param requestor * @param requestor
*/ */
@ -431,12 +435,12 @@ public class DeclarationWrapper implements IDeclaratorOwner
return astFactory.createTypedef(scope, nameDuple.toString(), abs, return astFactory.createTypedef(scope, nameDuple.toString(), abs,
getStartingOffset(), getStartingLine(), d getStartingOffset(), getStartingLine(), d
.getNameStartOffset(), d.getNameEndOffset(), d .getNameStartOffset(), d.getNameEndOffset(), d
.getNameLine()); .getNameLine(), fn);
if( isWithinClass ) if( isWithinClass )
return astFactory.createField( scope, nameDuple, isAuto(), d.getInitializerClause(), d.getBitFieldExpression(), abs, isMutable(), isExtern(), isRegister(), isStatic(), getStartingOffset(), getStartingLine(), d.getNameStartOffset(), d.getNameEndOffset(), d.getNameLine(), d.getConstructorExpression(), ((IASTClassSpecifier)scope).getCurrentVisibilityMode() ); return astFactory.createField( scope, nameDuple, isAuto(), d.getInitializerClause(), d.getBitFieldExpression(), abs, isMutable(), isExtern(), isRegister(), isStatic(), getStartingOffset(), getStartingLine(), d.getNameStartOffset(), d.getNameEndOffset(), d.getNameLine(), d.getConstructorExpression(), ((IASTClassSpecifier)scope).getCurrentVisibilityMode(), fn );
return astFactory.createVariable( scope, nameDuple, isAuto(), d.getInitializerClause(), d.getBitFieldExpression(), abs, isMutable(), isExtern(), isRegister(), isStatic(), getStartingOffset(), getStartingLine(), d.getNameStartOffset(), d.getNameEndOffset(), d.getNameLine(), d.getConstructorExpression() ); return astFactory.createVariable( scope, nameDuple, isAuto(), d.getInitializerClause(), d.getBitFieldExpression(), abs, isMutable(), isExtern(), isRegister(), isStatic(), getStartingOffset(), getStartingLine(), d.getNameStartOffset(), d.getNameEndOffset(), d.getNameLine(), d.getConstructorExpression(), fn );
} }
throw new BacktrackException(); throw new BacktrackException();
@ -456,7 +460,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
declarator.getArrayModifiers(), null, null), declarator.getArrayModifiers(), null, null),
startingOffset, getStartingLine(), declarator startingOffset, getStartingLine(), declarator
.getNameStartOffset(), declarator.getNameEndOffset(), .getNameStartOffset(), declarator.getNameEndOffset(),
declarator.getNameLine()); declarator.getNameLine(), fn);
} }
/** /**
* @param declarator * @param declarator
@ -534,7 +538,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
isStatic(), isStatic(),
startingOffset, startingOffset,
getStartingLine(), getStartingLine(),
declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), declarator.getConstructorExpression(), ((IASTClassSpecifier)scope).getCurrentVisibilityMode()); declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), declarator.getConstructorExpression(), ((IASTClassSpecifier)scope).getCurrentVisibilityMode(), fn);
} }
private List createParameterList(List currentParameters) throws ASTSemanticException private List createParameterList(List currentParameters) throws ASTSemanticException
@ -556,7 +560,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
wrapper.getTypeSpecifier(), wrapper.getTypeSpecifier(),
declarator.getPointerOperators(), declarator.getPointerOperators(),
declarator.getArrayModifiers(), declarator.getArrayModifiers(),
null, null, declarator.getName(), declarator.getInitializerClause(), wrapper.getStartingOffset(), getStartingLine(), declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), wrapper.getEndOffset(), getEndLine())); null, null, declarator.getName(), declarator.getInitializerClause(), wrapper.getStartingOffset(), getStartingLine(), declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), wrapper.getEndOffset(), getEndLine(), wrapper.fn ));
} }
} }
return result; return result;
@ -583,7 +587,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
isRegister(), isRegister(),
isStatic(), isStatic(),
getStartingOffset(), getStartingOffset(),
getStartingLine(), declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), declarator.getConstructorExpression()); getStartingLine(), declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), declarator.getConstructorExpression(), fn);
} }

View file

@ -64,9 +64,9 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throw backtrack; throw backtrack;
} }
protected final void throwBacktrack( int startingOffset, int endingOffset, int lineNumber ) throws BacktrackException { protected final void throwBacktrack( int startingOffset, int endingOffset, int lineNumber, char[] f ) throws BacktrackException {
++backtrackCount; ++backtrackCount;
backtrack.initialize( startingOffset, ( endingOffset == 0 ) ? startingOffset + 1 : endingOffset, lineNumber ); backtrack.initialize( startingOffset, ( endingOffset == 0 ) ? startingOffset + 1 : endingOffset, lineNumber, f );
throw backtrack; throw backtrack;
} }
@ -162,7 +162,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
if (LT(1) == type) if (LT(1) == type)
return consume(); return consume();
IToken la = LA(1); IToken la = LA(1);
throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber()); throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber(), la.getFilename());
return null; return null;
} }
@ -210,7 +210,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
* @param language * @param language
*/ */
protected void setupASTFactory(IScanner scanner, ParserLanguage language) { protected void setupASTFactory(IScanner scanner, ParserLanguage language) {
astFactory = ParserFactory.createASTFactory(this, astFactory = ParserFactory.createASTFactory(
ParserMode.EXPRESSION_PARSE, language); ParserMode.EXPRESSION_PARSE, language);
scanner.setASTFactory(astFactory); scanner.setASTFactory(astFactory);
astFactory.setLogger(log); astFactory.setLogger(log);
@ -270,7 +270,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} while (!scopes.empty() } while (!scopes.empty()
&& (top == IToken.tGT || top == IToken.tLT)); && (top == IToken.tGT || top == IToken.tLT));
if (top != IToken.tLBRACKET) if (top != IToken.tLBRACKET)
throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber()); throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber(), last.getFilename());
break; break;
case IToken.tRPAREN : case IToken.tRPAREN :
@ -279,7 +279,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} while (!scopes.empty() } while (!scopes.empty()
&& (top == IToken.tGT || top == IToken.tLT)); && (top == IToken.tGT || top == IToken.tLT));
if (top != IToken.tLPAREN) if (top != IToken.tLPAREN)
throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber()); throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber(), last.getFilename());
break; break;
case IToken.tLT : case IToken.tLT :
@ -299,6 +299,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
IToken start = LA(1); IToken start = LA(1);
int startingOffset = start.getOffset(); int startingOffset = start.getOffset();
int startingLineNumber = start.getOffset(); int startingLineNumber = start.getOffset();
char [] fn = start.getFilename();
start = null; start = null;
IASTExpression expression = null; IASTExpression expression = null;
List list = new LinkedList(); List list = new LinkedList();
@ -340,7 +341,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
KeywordSetKey.EXPRESSION); KeywordSetKey.EXPRESSION);
if (expression.getExpressionKind() == IASTExpression.Kind.PRIMARY_EMPTY) { if (expression.getExpressionKind() == IASTExpression.Kind.PRIMARY_EMPTY) {
throwBacktrack(so, ( lastToken != null ) ? lastToken.getEndOffset() : 0, ln); throwBacktrack(so, ( lastToken != null ) ? lastToken.getEndOffset() : 0, ln, fn );
} }
list.add(expression); list.add(expression);
completedArg = true; completedArg = true;
@ -386,7 +387,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
if (failed) { if (failed) {
if (expression != null) if (expression != null)
expression.freeReferences(astFactory.getReferenceManager()); expression.freeReferences(astFactory.getReferenceManager());
throwBacktrack(startingOffset, 0, startingLineNumber ); throwBacktrack(startingOffset, 0, startingLineNumber, fn );
} }
return list; return list;
@ -469,7 +470,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
default : default :
IToken l = LA(1); IToken l = LA(1);
backup(mark); backup(mark);
throwBacktrack(first.getOffset(), l.getEndOffset(), first.getLineNumber()); throwBacktrack(first.getOffset(), l.getEndOffset(), first.getLineNumber(), l.getFilename());
} }
while (LT(1) == IToken.tCOLONCOLON) { while (LT(1) == IToken.tCOLONCOLON) {
@ -488,7 +489,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
case IToken.t_operator : case IToken.t_operator :
IToken l = LA(1); IToken l = LA(1);
backup(mark); backup(mark);
throwBacktrack(first.getOffset(), l.getEndOffset(), first.getLineNumber()); throwBacktrack(first.getOffset(), l.getEndOffset(), first.getLineNumber(), l.getFilename());
case IToken.tIDENTIFIER : case IToken.tIDENTIFIER :
prev = last; prev = last;
last = consume(); last = consume();
@ -631,7 +632,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
break; break;
} }
IToken la = LA(1); IToken la = LA(1);
throwBacktrack(startingOffset, la.getEndOffset(), la.getLineNumber()); throwBacktrack(startingOffset, la.getEndOffset(), la.getLineNumber(), la.getFilename());
default : default :
if (extension.isValidCVModifier(language, LT(1))) { if (extension.isValidCVModifier(language, LT(1))) {
@ -662,7 +663,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
arrayMod = astFactory.createArrayModifier(exp); arrayMod = astFactory.createArrayModifier(exp);
} catch (Exception e) { } catch (Exception e) {
logException("consumeArrayModifiers::createArrayModifier()", e); //$NON-NLS-1$ logException("consumeArrayModifiers::createArrayModifier()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber()); throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber(), last.getFilename());
} }
d.addArrayModifier(arrayMod); d.addArrayModifier(arrayMod);
} }
@ -694,7 +695,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} else if (LA(1).isOperator()) } else if (LA(1).isOperator())
toSend = consume(); toSend = consume();
else else
throwBacktrack(operatorToken.getOffset(), toSend != null ? toSend.getEndOffset() : 0, operatorToken.getLineNumber() ); throwBacktrack(operatorToken.getOffset(), toSend != null ? toSend.getEndOffset() : 0, operatorToken.getLineNumber(), operatorToken.getFilename() );
} else { } else {
// must be a conversion function // must be a conversion function
typeId(d.getDeclarationWrapper().getScope(), true, typeId(d.getDeclarationWrapper().getScope(), true,
@ -809,6 +810,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
IToken la = LA(1); IToken la = LA(1);
int startingOffset = la.getOffset(); int startingOffset = la.getOffset();
int ln = la.getLineNumber(); int ln = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression assignmentExpression = assignmentExpression(scope, kind, IASTExpression assignmentExpression = assignmentExpression(scope, kind,
key); key);
while (LT(1) == IToken.tCOMMA) { while (LT(1) == IToken.tCOMMA) {
@ -827,7 +829,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("expression::createExpression()", e); //$NON-NLS-1$ logException("expression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, ln); throwBacktrack(startingOffset, endOffset, ln, fn);
} }
} }
return assignmentExpression; return assignmentExpression;
@ -929,7 +931,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("throwExpression::createExpression()", e); //$NON-NLS-1$ logException("throwExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(throwToken.getOffset(), endOffset, throwToken.getLineNumber() ); throwBacktrack(throwToken.getOffset(), endOffset, throwToken.getLineNumber(), throwToken.getFilename() );
} }
return null; return null;
@ -946,6 +948,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
IToken la = LA(1); IToken la = LA(1);
int startingOffset = la.getOffset(); int startingOffset = la.getOffset();
int ln = la.getLineNumber(); int ln = la.getLineNumber();
char [] fn = la.getFilename();
la = null; la = null;
IASTExpression firstExpression = logicalOrExpression(scope, kind, key); IASTExpression firstExpression = logicalOrExpression(scope, kind, key);
if (LT(1) == IToken.tQUESTION) { if (LT(1) == IToken.tQUESTION) {
@ -964,7 +967,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("conditionalExpression::createExpression()", e); //$NON-NLS-1$ logException("conditionalExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, ln); throwBacktrack(startingOffset, endOffset, ln, fn);
} }
} }
return firstExpression; return firstExpression;
@ -977,8 +980,10 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression logicalOrExpression(IASTScope scope, protected IASTExpression logicalOrExpression(IASTScope scope,
CompletionKind kind, KeywordSetKey key) throws BacktrackException, CompletionKind kind, KeywordSetKey key) throws BacktrackException,
EndOfFileException { EndOfFileException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression firstExpression = logicalAndExpression(scope, kind, key); IASTExpression firstExpression = logicalAndExpression(scope, kind, key);
while (LT(1) == IToken.tOR) { while (LT(1) == IToken.tOR) {
consume(IToken.tOR); consume(IToken.tOR);
@ -994,7 +999,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("logicalOrExpression::createExpression()", e); //$NON-NLS-1$ logException("logicalOrExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
} }
return firstExpression; return firstExpression;
@ -1007,8 +1012,10 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression logicalAndExpression(IASTScope scope, protected IASTExpression logicalAndExpression(IASTScope scope,
CompletionKind kind, KeywordSetKey key) throws BacktrackException, CompletionKind kind, KeywordSetKey key) throws BacktrackException,
EndOfFileException { EndOfFileException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression firstExpression = inclusiveOrExpression(scope, kind, key); IASTExpression firstExpression = inclusiveOrExpression(scope, kind, key);
while (LT(1) == IToken.tAND) { while (LT(1) == IToken.tAND) {
consume(IToken.tAND); consume(IToken.tAND);
@ -1024,7 +1031,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("logicalAndExpression::createExpression()", e); //$NON-NLS-1$ logException("logicalAndExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
} }
return firstExpression; return firstExpression;
@ -1037,8 +1044,11 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression inclusiveOrExpression(IASTScope scope, protected IASTExpression inclusiveOrExpression(IASTScope scope,
CompletionKind kind, KeywordSetKey key) throws BacktrackException, CompletionKind kind, KeywordSetKey key) throws BacktrackException,
EndOfFileException { EndOfFileException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression firstExpression = exclusiveOrExpression(scope, kind, key); IASTExpression firstExpression = exclusiveOrExpression(scope, kind, key);
while (LT(1) == IToken.tBITOR) { while (LT(1) == IToken.tBITOR) {
consume(); consume();
@ -1054,7 +1064,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("inclusiveOrExpression::createExpression()", e); //$NON-NLS-1$ logException("inclusiveOrExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
} }
return firstExpression; return firstExpression;
@ -1067,8 +1077,11 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression exclusiveOrExpression(IASTScope scope, protected IASTExpression exclusiveOrExpression(IASTScope scope,
CompletionKind kind, KeywordSetKey key) throws BacktrackException, CompletionKind kind, KeywordSetKey key) throws BacktrackException,
EndOfFileException { EndOfFileException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression firstExpression = andExpression(scope, kind, key); IASTExpression firstExpression = andExpression(scope, kind, key);
while (LT(1) == IToken.tXOR) { while (LT(1) == IToken.tXOR) {
consume(); consume();
@ -1084,7 +1097,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("exclusiveORExpression::createExpression()", e); //$NON-NLS-1$ logException("exclusiveORExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
} }
return firstExpression; return firstExpression;
@ -1097,8 +1110,11 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression andExpression(IASTScope scope, protected IASTExpression andExpression(IASTScope scope,
CompletionKind kind, KeywordSetKey key) throws EndOfFileException, CompletionKind kind, KeywordSetKey key) throws EndOfFileException,
BacktrackException { BacktrackException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression firstExpression = equalityExpression(scope, kind, key); IASTExpression firstExpression = equalityExpression(scope, kind, key);
while (LT(1) == IToken.tAMPER) { while (LT(1) == IToken.tAMPER) {
consume(); consume();
@ -1113,7 +1129,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("andExpression::createExpression()", e); //$NON-NLS-1$ logException("andExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
} }
return firstExpression; return firstExpression;
@ -1146,8 +1162,11 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression equalityExpression(IASTScope scope, protected IASTExpression equalityExpression(IASTScope scope,
CompletionKind kind, KeywordSetKey key) throws EndOfFileException, CompletionKind kind, KeywordSetKey key) throws EndOfFileException,
BacktrackException { BacktrackException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression firstExpression = relationalExpression(scope, kind, key); IASTExpression firstExpression = relationalExpression(scope, kind, key);
for (;;) { for (;;) {
switch (LT(1)) { switch (LT(1)) {
@ -1169,7 +1188,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"equalityExpression::createExpression()", e); //$NON-NLS-1$ "equalityExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
default : default :
@ -1185,8 +1204,11 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression relationalExpression(IASTScope scope, protected IASTExpression relationalExpression(IASTScope scope,
CompletionKind kind, KeywordSetKey key) throws BacktrackException, CompletionKind kind, KeywordSetKey key) throws BacktrackException,
EndOfFileException { EndOfFileException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression firstExpression = shiftExpression(scope, kind, key); IASTExpression firstExpression = shiftExpression(scope, kind, key);
for (;;) { for (;;) {
switch (LT(1)) { switch (LT(1)) {
@ -1234,7 +1256,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"relationalExpression::createExpression()", e); //$NON-NLS-1$ "relationalExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
default : default :
@ -1257,8 +1279,10 @@ public class ExpressionParser implements IExpressionParser, IParserData {
*/ */
public IASTExpression shiftExpression(IASTScope scope, CompletionKind kind, public IASTExpression shiftExpression(IASTScope scope, CompletionKind kind,
KeywordSetKey key) throws BacktrackException, EndOfFileException { KeywordSetKey key) throws BacktrackException, EndOfFileException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression firstExpression = additiveExpression(scope, kind, key); IASTExpression firstExpression = additiveExpression(scope, kind, key);
for (;;) { for (;;) {
switch (LT(1)) { switch (LT(1)) {
@ -1279,7 +1303,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("shiftExpression::createExpression()", e); //$NON-NLS-1$ logException("shiftExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
default : default :
@ -1295,8 +1319,10 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression additiveExpression(IASTScope scope, protected IASTExpression additiveExpression(IASTScope scope,
CompletionKind kind, KeywordSetKey key) throws BacktrackException, CompletionKind kind, KeywordSetKey key) throws BacktrackException,
EndOfFileException { EndOfFileException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression firstExpression = multiplicativeExpression(scope, kind, IASTExpression firstExpression = multiplicativeExpression(scope, kind,
key); key);
for (;;) { for (;;) {
@ -1319,7 +1345,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"additiveExpression::createExpression()", e); //$NON-NLS-1$ "additiveExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
default : default :
@ -1335,8 +1361,10 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression multiplicativeExpression(IASTScope scope, protected IASTExpression multiplicativeExpression(IASTScope scope,
CompletionKind kind, KeywordSetKey key) throws BacktrackException, CompletionKind kind, KeywordSetKey key) throws BacktrackException,
EndOfFileException { EndOfFileException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression firstExpression = pmExpression(scope, kind, key); IASTExpression firstExpression = pmExpression(scope, kind, key);
for (;;) { for (;;) {
switch (LT(1)) { switch (LT(1)) {
@ -1371,7 +1399,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"multiplicativeExpression::createExpression()", e); //$NON-NLS-1$ "multiplicativeExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
default : default :
@ -1386,8 +1414,11 @@ public class ExpressionParser implements IExpressionParser, IParserData {
*/ */
protected IASTExpression pmExpression(IASTScope scope, CompletionKind kind, protected IASTExpression pmExpression(IASTScope scope, CompletionKind kind,
KeywordSetKey key) throws EndOfFileException, BacktrackException { KeywordSetKey key) throws EndOfFileException, BacktrackException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression firstExpression = castExpression(scope, kind, key); IASTExpression firstExpression = castExpression(scope, kind, key);
for (;;) { for (;;) {
switch (LT(1)) { switch (LT(1)) {
@ -1408,7 +1439,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("pmExpression::createExpression()", e); //$NON-NLS-1$ logException("pmExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
default : default :
@ -1427,8 +1458,10 @@ public class ExpressionParser implements IExpressionParser, IParserData {
BacktrackException { BacktrackException {
// TO DO: we need proper symbol checkint to ensure type name // TO DO: we need proper symbol checkint to ensure type name
if (LT(1) == IToken.tLPAREN) { if (LT(1) == IToken.tLPAREN) {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IToken mark = mark(); IToken mark = mark();
consume(); consume();
if (templateIdScopes != null) { if (templateIdScopes != null) {
@ -1470,7 +1503,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("castExpression::createExpression()", e); //$NON-NLS-1$ logException("castExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
} catch (BacktrackException b) { } catch (BacktrackException b) {
if (templateIdScopes != null && !popped) { if (templateIdScopes != null && !popped) {
@ -1652,7 +1685,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0;
if (kind == null) if (kind == null)
throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename());
TypeId id = getTypeIdInstance(scope); TypeId id = getTypeIdInstance(scope);
IToken last = lastToken; IToken last = lastToken;
@ -1691,7 +1724,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("typeId::createTypeId()", e); //$NON-NLS-1$ logException("typeId::createTypeId()", e); //$NON-NLS-1$
throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename());
} }
return null; return null;
} }
@ -1711,8 +1744,10 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression deleteExpression(IASTScope scope, protected IASTExpression deleteExpression(IASTScope scope,
CompletionKind kind, KeywordSetKey key) throws EndOfFileException, CompletionKind kind, KeywordSetKey key) throws EndOfFileException,
BacktrackException { BacktrackException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
if (LT(1) == IToken.tCOLONCOLON) { if (LT(1) == IToken.tCOLONCOLON) {
// global scope // global scope
consume(IToken.tCOLONCOLON); consume(IToken.tCOLONCOLON);
@ -1738,7 +1773,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("deleteExpression::createExpression()", e); //$NON-NLS-1$ logException("deleteExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
return null; return null;
} }
@ -1763,8 +1798,10 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throws BacktrackException, EndOfFileException { throws BacktrackException, EndOfFileException {
setCompletionValues(scope, CompletionKind.NEW_TYPE_REFERENCE, setCompletionValues(scope, CompletionKind.NEW_TYPE_REFERENCE,
KeywordSetKey.EMPTY); KeywordSetKey.EMPTY);
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
if (LT(1) == IToken.tCOLONCOLON) { if (LT(1) == IToken.tCOLONCOLON) {
// global scope // global scope
consume(IToken.tCOLONCOLON); consume(IToken.tCOLONCOLON);
@ -1881,7 +1918,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"newExpression_1::createExpression()", e); //$NON-NLS-1$ "newExpression_1::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
} }
} catch (BacktrackException e) { } catch (BacktrackException e) {
@ -1951,7 +1988,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
return null; return null;
} catch (Exception e) { } catch (Exception e) {
logException("newExpression_2::createExpression()", e); //$NON-NLS-1$ logException("newExpression_2::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
return null; return null;
} }
@ -1968,8 +2005,10 @@ public class ExpressionParser implements IExpressionParser, IParserData {
*/ */
public IASTExpression unaryExpression(IASTScope scope, CompletionKind kind, public IASTExpression unaryExpression(IASTScope scope, CompletionKind kind,
KeywordSetKey key) throws EndOfFileException, BacktrackException { KeywordSetKey key) throws EndOfFileException, BacktrackException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
switch (LT(1)) { switch (LT(1)) {
case IToken.tSTAR : case IToken.tSTAR :
consume(); consume();
@ -2036,7 +2075,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("unaryExpression_1::createExpression()", e); //$NON-NLS-1$ logException("unaryExpression_1::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
try { try {
return astFactory.createExpression(scope, return astFactory.createExpression(scope,
@ -2047,7 +2086,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e1.getProblem()); throwBacktrack(e1.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("unaryExpression_1::createExpression()", e); //$NON-NLS-1$ logException("unaryExpression_1::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
case IToken.t_new : case IToken.t_new :
return newExpression(scope, key); return newExpression(scope, key);
@ -2082,8 +2121,10 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression postfixExpression(IASTScope scope, protected IASTExpression postfixExpression(IASTScope scope,
CompletionKind kind, KeywordSetKey key) throws EndOfFileException, CompletionKind kind, KeywordSetKey key) throws EndOfFileException,
BacktrackException { BacktrackException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
IASTExpression firstExpression = null; IASTExpression firstExpression = null;
boolean isTemplate = false; boolean isTemplate = false;
@ -2124,7 +2165,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(ase.getProblem()); throwBacktrack(ase.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("postfixExpression_1::createExpression()", e); //$NON-NLS-1$ logException("postfixExpression_1::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
// simple-type-specifier ( assignment-expression , .. ) // simple-type-specifier ( assignment-expression , .. )
@ -2216,7 +2257,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e6.getProblem()); throwBacktrack(e6.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("postfixExpression_2::createExpression()", e); //$NON-NLS-1$ logException("postfixExpression_2::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
default : default :
@ -2247,7 +2288,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"postfixExpression_3::createExpression()", e); //$NON-NLS-1$ "postfixExpression_3::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
case IToken.tLPAREN : case IToken.tLPAREN :
@ -2291,7 +2332,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"postfixExpression_4::createExpression()", e); //$NON-NLS-1$ "postfixExpression_4::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
case IToken.tINCR : case IToken.tINCR :
@ -2306,7 +2347,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"postfixExpression_5::createExpression()", e); //$NON-NLS-1$ "postfixExpression_5::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
case IToken.tDECR : case IToken.tDECR :
@ -2321,7 +2362,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"postfixExpression_6::createExpression()", e); //$NON-NLS-1$ "postfixExpression_6::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
case IToken.tDOT : case IToken.tDOT :
@ -2359,7 +2400,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"postfixExpression_7::createExpression()", e); //$NON-NLS-1$ "postfixExpression_7::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
case IToken.tARROW : case IToken.tARROW :
@ -2396,7 +2437,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"postfixExpression_8::createExpression()", e); //$NON-NLS-1$ "postfixExpression_8::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
break; break;
default : default :
@ -2432,8 +2473,11 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression simpleTypeConstructorExpression(IASTScope scope, protected IASTExpression simpleTypeConstructorExpression(IASTScope scope,
Kind type, KeywordSetKey key) throws EndOfFileException, Kind type, KeywordSetKey key) throws EndOfFileException,
BacktrackException { BacktrackException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
la = null;
String typeName = consume().getImage(); String typeName = consume().getImage();
consume(IToken.tLPAREN); consume(IToken.tLPAREN);
setCurrentFunctionName(typeName); setCurrentFunctionName(typeName);
@ -2449,7 +2493,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"simpleTypeConstructorExpression::createExpression()", e); //$NON-NLS-1$ "simpleTypeConstructorExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
return null; return null;
} }
@ -2474,7 +2518,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e1.getProblem()); throwBacktrack(e1.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("primaryExpression_1::createExpression()", e); //$NON-NLS-1$ logException("primaryExpression_1::createExpression()", e); //$NON-NLS-1$
throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename());
} }
case IToken.tFLOATINGPT : case IToken.tFLOATINGPT :
t = consume(); t = consume();
@ -2486,7 +2530,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e2.getProblem()); throwBacktrack(e2.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("primaryExpression_2::createExpression()", e); //$NON-NLS-1$ logException("primaryExpression_2::createExpression()", e); //$NON-NLS-1$
throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename());
} }
case IToken.tSTRING : case IToken.tSTRING :
case IToken.tLSTRING : case IToken.tLSTRING :
@ -2499,7 +2543,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e5.getProblem()); throwBacktrack(e5.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("primaryExpression_3::createExpression()", e); //$NON-NLS-1$ logException("primaryExpression_3::createExpression()", e); //$NON-NLS-1$
throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename());
} }
case IToken.t_false : case IToken.t_false :
@ -2513,7 +2557,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e3.getProblem()); throwBacktrack(e3.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("primaryExpression_4::createExpression()", e); //$NON-NLS-1$ logException("primaryExpression_4::createExpression()", e); //$NON-NLS-1$
throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename() );
} }
case IToken.tCHAR : case IToken.tCHAR :
@ -2528,7 +2572,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e4.getProblem()); throwBacktrack(e4.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("primaryExpression_5::createExpression()", e); //$NON-NLS-1$ logException("primaryExpression_5::createExpression()", e); //$NON-NLS-1$
throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename());
} }
case IToken.t_this : case IToken.t_this :
@ -2541,7 +2585,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e7.getProblem()); throwBacktrack(e7.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("primaryExpression_6::createExpression()", e); //$NON-NLS-1$ logException("primaryExpression_6::createExpression()", e); //$NON-NLS-1$
throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename());
} }
case IToken.tLPAREN : case IToken.tLPAREN :
t = consume(); t = consume();
@ -2561,7 +2605,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e6.getProblem()); throwBacktrack(e6.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("primaryExpression_7::createExpression()", e); //$NON-NLS-1$ logException("primaryExpression_7::createExpression()", e); //$NON-NLS-1$
throwBacktrack(t.getOffset(), endOffset, t.getLineNumber() ); throwBacktrack(t.getOffset(), endOffset, t.getLineNumber(), t.getFilename() );
} }
case IToken.tIDENTIFIER : case IToken.tIDENTIFIER :
case IToken.tCOLONCOLON : case IToken.tCOLONCOLON :
@ -2575,7 +2619,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
} catch (BacktrackException bt) { } catch (BacktrackException bt) {
IToken mark = mark(); IToken mark = mark();
Declarator d = new Declarator(new DeclarationWrapper(scope, Declarator d = new Declarator(new DeclarationWrapper(scope,
mark.getOffset(), mark.getLineNumber(), null)); mark.getOffset(), mark.getLineNumber(), null, mark.getFilename()));
if (LT(1) == IToken.tCOLONCOLON if (LT(1) == IToken.tCOLONCOLON
|| LT(1) == IToken.tIDENTIFIER) { || LT(1) == IToken.tIDENTIFIER) {
@ -2593,7 +2637,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
operatorId(d, start, null, kind); operatorId(d, start, null, kind);
else { else {
backup(mark); backup(mark);
throwBacktrack(startingOffset, end.getEndOffset(), end.getLineNumber()); throwBacktrack(startingOffset, end.getEndOffset(), end.getLineNumber(), t.getFilename());
} }
} else if (LT(1) == IToken.t_operator) } else if (LT(1) == IToken.t_operator)
operatorId(d, null, null, kind); operatorId(d, null, null, kind);
@ -2610,11 +2654,13 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e8.getProblem()); throwBacktrack(e8.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("primaryExpression_8::createExpression()", e); //$NON-NLS-1$ logException("primaryExpression_8::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, duple.getFilename());
} }
default : default :
startingOffset = LA(1).getOffset(); IToken la= LA(1);
line = LA(1).getLineNumber(); startingOffset = la.getOffset();
line = la.getLineNumber();
char [] fn = la.getFilename();
if (!queryLookaheadCapability(2)) { if (!queryLookaheadCapability(2)) {
if (LA(1).canBeAPrefix()) { if (LA(1).canBeAPrefix()) {
consume(); consume();
@ -2631,7 +2677,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
return null; return null;
} catch (Exception e) { } catch (Exception e) {
logException("primaryExpression_9::createExpression()", e); //$NON-NLS-1$ logException("primaryExpression_9::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, 0, line); throwBacktrack(startingOffset, 0, line, fn);
} }
return empty; return empty;
} }
@ -2692,7 +2738,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("assignmentOperatorExpression::createExpression()", e); //$NON-NLS-1$ logException("assignmentOperatorExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(t.getOffset(), endOffset, t.getLineNumber()); throwBacktrack(t.getOffset(), endOffset, t.getLineNumber(), t.getFilename());
} }
return null; return null;
} }
@ -2720,8 +2766,11 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression unaryOperatorCastExpression(IASTScope scope, protected IASTExpression unaryOperatorCastExpression(IASTScope scope,
IASTExpression.Kind kind, CompletionKind completionKind, IASTExpression.Kind kind, CompletionKind completionKind,
KeywordSetKey key) throws EndOfFileException, BacktrackException { KeywordSetKey key) throws EndOfFileException, BacktrackException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
la = null;
IASTExpression castExpression = castExpression(scope, completionKind, IASTExpression castExpression = castExpression(scope, completionKind,
key); key);
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0;
@ -2732,7 +2781,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("unaryOperatorCastExpression::createExpression()", e); //$NON-NLS-1$ logException("unaryOperatorCastExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
return null; return null;
} }
@ -2740,8 +2789,13 @@ public class ExpressionParser implements IExpressionParser, IParserData {
protected IASTExpression specialCastExpression(IASTScope scope, protected IASTExpression specialCastExpression(IASTScope scope,
IASTExpression.Kind kind, KeywordSetKey key) IASTExpression.Kind kind, KeywordSetKey key)
throws EndOfFileException, BacktrackException { throws EndOfFileException, BacktrackException {
int line = LA(1).getLineNumber(); IToken la = LA(1);
int startingOffset = consume().getOffset(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
la = null;
consume();
consume(IToken.tLT); consume(IToken.tLT);
IASTTypeId duple = typeId(scope, false, CompletionKind.TYPE_REFERENCE); IASTTypeId duple = typeId(scope, false, CompletionKind.TYPE_REFERENCE);
consume(IToken.tGT); consume(IToken.tGT);
@ -2756,14 +2810,11 @@ public class ExpressionParser implements IExpressionParser, IParserData {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
logException("specialCastExpression::createExpression()", e); //$NON-NLS-1$ logException("specialCastExpression::createExpression()", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line ); throwBacktrack(startingOffset, endOffset, line, fn );
} }
return null; return null;
} }
public char[] getCurrentFilename() {
return scanner.getCurrentFilename();
}
protected boolean isCancelled = false; protected boolean isCancelled = false;
@ -2789,18 +2840,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
if( first instanceof ITokenDuple ) setGreaterNameContext((ITokenDuple) first); if( first instanceof ITokenDuple ) setGreaterNameContext((ITokenDuple) first);
return first; return first;
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IFilenameProvider#getCurrentFileIndex()
*/
public int getCurrentFileIndex() {
return scanner.getCurrentFileIndex();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IFilenameProvider#getFilenameForIndex(int)
*/
public String getFilenameForIndex(int index) {
return scanner.getFilenameForIndex(index);
}
public boolean validateCaches() { public boolean validateCaches() {
return true; return true;

View file

@ -12,7 +12,6 @@ package org.eclipse.cdt.internal.core.parser;
import org.eclipse.cdt.core.parser.BacktrackException; import org.eclipse.cdt.core.parser.BacktrackException;
import org.eclipse.cdt.core.parser.EndOfFileException; import org.eclipse.cdt.core.parser.EndOfFileException;
import org.eclipse.cdt.core.parser.IFilenameProvider;
import org.eclipse.cdt.core.parser.KeywordSetKey; import org.eclipse.cdt.core.parser.KeywordSetKey;
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode; import org.eclipse.cdt.core.parser.ast.IASTCompletionNode;
import org.eclipse.cdt.core.parser.ast.IASTExpression; import org.eclipse.cdt.core.parser.ast.IASTExpression;
@ -21,7 +20,7 @@ import org.eclipse.cdt.core.parser.ast.IASTScope;
/** /**
* @author jcamelon * @author jcamelon
*/ */
public interface IExpressionParser extends IFilenameProvider { public interface IExpressionParser {
/** /**
* Request a parse from a pre-configured parser to parse an expression. * Request a parse from a pre-configured parser to parse an expression.

View file

@ -45,7 +45,6 @@ import org.eclipse.cdt.core.parser.ast.IASTNamespaceAlias;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition; import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTNode;
import org.eclipse.cdt.core.parser.ast.IASTOffsetableElement; import org.eclipse.cdt.core.parser.ast.IASTOffsetableElement;
import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTTemplate; import org.eclipse.cdt.core.parser.ast.IASTTemplate;
@ -106,7 +105,7 @@ public abstract class Parser extends ExpressionParser implements IParser
bt.getStartingOffset(), bt.getStartingOffset(),
bt.getEndOffset(), bt.getEndOffset(),
bt.getLineNumber(), bt.getLineNumber(),
scanner.getCurrentFilename(), bt.getFilename(),
EMPTY_STRING, EMPTY_STRING,
false, false,
true ); true );
@ -309,7 +308,7 @@ public abstract class Parser extends ExpressionParser implements IParser
if (LT(1) == IToken.tIDENTIFIER || LT(1) == IToken.tCOLONCOLON) if (LT(1) == IToken.tIDENTIFIER || LT(1) == IToken.tCOLONCOLON)
duple = name(scope, CompletionKind.NAMESPACE_REFERENCE, KeywordSetKey.EMPTY); duple = name(scope, CompletionKind.NAMESPACE_REFERENCE, KeywordSetKey.EMPTY);
else else
throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber()); throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber(), firstToken.getFilename());
if (LT(1) == IToken.tSEMI) if (LT(1) == IToken.tSEMI)
{ {
IToken last = consume(IToken.tSEMI); IToken last = consume(IToken.tSEMI);
@ -322,13 +321,13 @@ public abstract class Parser extends ExpressionParser implements IParser
catch (Exception e1) catch (Exception e1)
{ {
logException( "usingClause:createUsingDirective", e1 ); //$NON-NLS-1$ logException( "usingClause:createUsingDirective", e1 ); //$NON-NLS-1$
throwBacktrack(firstToken.getOffset(), last.getEndOffset(), firstToken.getLineNumber()); throwBacktrack(firstToken.getOffset(), last.getEndOffset(), firstToken.getLineNumber(), last.getFilename());
} }
astUD.acceptElement(requestor, astFactory.getReferenceManager()); astUD.acceptElement(requestor, astFactory.getReferenceManager());
return astUD; return astUD;
} }
endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0; endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0;
throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber()); throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber(), firstToken.getFilename());
} }
boolean typeName = false; boolean typeName = false;
setCompletionValues(scope, CompletionKind.TYPE_REFERENCE, KeywordSetKey.POST_USING ); setCompletionValues(scope, CompletionKind.TYPE_REFERENCE, KeywordSetKey.POST_USING );
@ -348,7 +347,7 @@ public abstract class Parser extends ExpressionParser implements IParser
} }
else else
{ {
throwBacktrack(firstToken.getOffset(), ( lastToken != null ) ? lastToken.getEndOffset() : 0, firstToken.getLineNumber()); throwBacktrack(firstToken.getOffset(), ( lastToken != null ) ? lastToken.getEndOffset() : 0, firstToken.getLineNumber(), firstToken.getFilename());
} }
if (LT(1) == IToken.tSEMI) if (LT(1) == IToken.tSEMI)
{ {
@ -370,14 +369,14 @@ public abstract class Parser extends ExpressionParser implements IParser
if( e1 instanceof ASTSemanticException && ((ASTSemanticException)e1).getProblem() != null ) if( e1 instanceof ASTSemanticException && ((ASTSemanticException)e1).getProblem() != null )
throwBacktrack(((ASTSemanticException)e1).getProblem()); throwBacktrack(((ASTSemanticException)e1).getProblem());
else else
throwBacktrack(firstToken.getOffset(), last.getEndOffset(), firstToken.getLineNumber()); throwBacktrack(firstToken.getOffset(), last.getEndOffset(), firstToken.getLineNumber(), firstToken.getFilename());
} }
declaration.acceptElement( requestor, astFactory.getReferenceManager() ); declaration.acceptElement( requestor, astFactory.getReferenceManager() );
setCompletionValues(scope, getCompletionKindForDeclaration(scope, null), KeywordSetKey.DECLARATION ); setCompletionValues(scope, getCompletionKindForDeclaration(scope, null), KeywordSetKey.DECLARATION );
return declaration; return declaration;
} }
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0;
throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber()); throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber(), firstToken.getFilename());
return null; return null;
} }
/** /**
@ -398,7 +397,7 @@ public abstract class Parser extends ExpressionParser implements IParser
{ {
IToken firstToken = consume(IToken.t_extern); IToken firstToken = consume(IToken.t_extern);
if (LT(1) != IToken.tSTRING) if (LT(1) != IToken.tSTRING)
throwBacktrack(firstToken.getOffset(), firstToken.getEndOffset(), firstToken.getLineNumber()); throwBacktrack(firstToken.getOffset(), firstToken.getEndOffset(), firstToken.getLineNumber(), firstToken.getFilename());
IToken spec = consume(IToken.tSTRING); IToken spec = consume(IToken.tSTRING);
if (LT(1) == IToken.tLBRACE) if (LT(1) == IToken.tLBRACE)
@ -411,12 +410,12 @@ public abstract class Parser extends ExpressionParser implements IParser
astFactory.createLinkageSpecification( astFactory.createLinkageSpecification(
scope, scope,
spec.getImage(), spec.getImage(),
firstToken.getOffset(), firstToken.getLineNumber()); firstToken.getOffset(), firstToken.getLineNumber(), firstToken.getFilename());
} }
catch (Exception e) catch (Exception e)
{ {
logException( "linkageSpecification_1:createLinkageSpecification", e ); //$NON-NLS-1$ logException( "linkageSpecification_1:createLinkageSpecification", e ); //$NON-NLS-1$
throwBacktrack(firstToken.getOffset(), lbrace.getEndOffset(), lbrace.getLineNumber()); throwBacktrack(firstToken.getOffset(), lbrace.getEndOffset(), lbrace.getLineNumber(), lbrace.getFilename());
} }
linkage.enterScope( requestor, astFactory.getReferenceManager() ); linkage.enterScope( requestor, astFactory.getReferenceManager() );
@ -459,12 +458,12 @@ public abstract class Parser extends ExpressionParser implements IParser
astFactory.createLinkageSpecification( astFactory.createLinkageSpecification(
scope, scope,
spec.getImage(), spec.getImage(),
firstToken.getOffset(), firstToken.getLineNumber()); firstToken.getOffset(), firstToken.getLineNumber(), firstToken.getFilename());
} }
catch (Exception e) catch (Exception e)
{ {
logException( "linkageSpecification_2:createLinkageSpecification", e ); //$NON-NLS-1$ logException( "linkageSpecification_2:createLinkageSpecification", e ); //$NON-NLS-1$
throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber()); throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber(), firstToken.getFilename());
return null; return null;
} }
linkage.enterScope( requestor, astFactory.getReferenceManager() ); linkage.enterScope( requestor, astFactory.getReferenceManager() );
@ -512,13 +511,13 @@ public abstract class Parser extends ExpressionParser implements IParser
templateInstantiation = templateInstantiation =
astFactory.createTemplateInstantiation( astFactory.createTemplateInstantiation(
scope, scope,
firstToken.getOffset(), firstToken.getLineNumber()); firstToken.getOffset(), firstToken.getLineNumber(), firstToken.getFilename());
} }
catch (Exception e) catch (Exception e)
{ {
logException( "templateDeclaration:createTemplateInstantiation", e ); //$NON-NLS-1$ logException( "templateDeclaration:createTemplateInstantiation", e ); //$NON-NLS-1$
backup( mark ); backup( mark );
throwBacktrack(firstToken.getOffset(), firstToken.getEndOffset(), firstToken.getLineNumber()); throwBacktrack(firstToken.getOffset(), firstToken.getEndOffset(), firstToken.getLineNumber(), firstToken.getFilename());
return null; return null;
} }
templateInstantiation.enterScope( requestor, astFactory.getReferenceManager() ); templateInstantiation.enterScope( requestor, astFactory.getReferenceManager() );
@ -540,13 +539,13 @@ public abstract class Parser extends ExpressionParser implements IParser
templateSpecialization = templateSpecialization =
astFactory.createTemplateSpecialization( astFactory.createTemplateSpecialization(
scope, scope,
firstToken.getOffset(), firstToken.getLineNumber()); firstToken.getOffset(), firstToken.getLineNumber(), firstToken.getFilename());
} }
catch (Exception e) catch (Exception e)
{ {
logException( "templateDeclaration:createTemplateSpecialization", e ); //$NON-NLS-1$ logException( "templateDeclaration:createTemplateSpecialization", e ); //$NON-NLS-1$
backup( mark ); backup( mark );
throwBacktrack(firstToken.getOffset(), gt.getEndOffset(), gt.getLineNumber()); throwBacktrack(firstToken.getOffset(), gt.getEndOffset(), gt.getLineNumber(), gt.getFilename());
return null; return null;
} }
templateSpecialization.enterScope(requestor, astFactory.getReferenceManager()); templateSpecialization.enterScope(requestor, astFactory.getReferenceManager());
@ -570,12 +569,12 @@ public abstract class Parser extends ExpressionParser implements IParser
scope, scope,
parms, parms,
exported, exported,
firstToken.getOffset(), firstToken.getLineNumber()); firstToken.getOffset(), firstToken.getLineNumber(), firstToken.getFilename());
} }
catch (Exception e) catch (Exception e)
{ {
logException( "templateDeclaration:createTemplateDeclaration", e ); //$NON-NLS-1$ logException( "templateDeclaration:createTemplateDeclaration", e ); //$NON-NLS-1$
throwBacktrack(firstToken.getOffset(), gt.getEndOffset(), gt.getLineNumber()); throwBacktrack(firstToken.getOffset(), gt.getEndOffset(), gt.getLineNumber(), gt.getFilename());
return null; return null;
} }
templateDecl.enterScope( requestor, astFactory.getReferenceManager() ); templateDecl.enterScope( requestor, astFactory.getReferenceManager() );
@ -631,6 +630,8 @@ public abstract class Parser extends ExpressionParser implements IParser
IToken la = LA(1); IToken la = LA(1);
int startingOffset = la.getOffset(); int startingOffset = la.getOffset();
int lnum = la.getLineNumber(); int lnum = la.getLineNumber();
char [] fn = la.getFilename();
for (;;) for (;;)
{ {
if (LT(1) == IToken.tGT) if (LT(1) == IToken.tGT)
@ -675,7 +676,7 @@ public abstract class Parser extends ExpressionParser implements IParser
(id != null) ? id.getOffset() : 0, (id != null) ? id.getOffset() : 0,
(id != null) ? id.getEndOffset() : 0, (id != null) ? id.getEndOffset() : 0,
(id != null) ? id.getLineNumber() : 0, (id != null) ? id.getLineNumber() : 0,
lastToken.getEndOffset(), lastToken.getLineNumber() )); lastToken.getEndOffset(), lastToken.getLineNumber(), lastToken.getFilename() ));
} }
catch( ASTSemanticException ase ) catch( ASTSemanticException ase )
{ {
@ -684,7 +685,7 @@ public abstract class Parser extends ExpressionParser implements IParser
catch (Exception e) catch (Exception e)
{ {
logException( "templateParameterList_1:createTemplateParameter", e ); //$NON-NLS-1$ logException( "templateParameterList_1:createTemplateParameter", e ); //$NON-NLS-1$
throwBacktrack(startingOffset, ( lastToken != null ) ? lastToken.getEndOffset() : 0, lnum); throwBacktrack(startingOffset, ( lastToken != null ) ? lastToken.getEndOffset() : 0, lnum, fn);
} }
} }
@ -725,7 +726,7 @@ public abstract class Parser extends ExpressionParser implements IParser
(optionalId != null) ? optionalId.getOffset() : 0, (optionalId != null) ? optionalId.getOffset() : 0,
(optionalId != null) ? optionalId.getEndOffset() : 0, (optionalId != null) ? optionalId.getEndOffset() : 0,
(optionalId != null) ? optionalId.getLineNumber() : 0, (optionalId != null) ? optionalId.getLineNumber() : 0,
lastToken.getEndOffset(), lastToken.getLineNumber() )); lastToken.getEndOffset(), lastToken.getLineNumber(), lastToken.getFilename() ));
} }
catch( ASTSemanticException ase ) catch( ASTSemanticException ase )
{ {
@ -735,7 +736,7 @@ public abstract class Parser extends ExpressionParser implements IParser
{ {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
logException( "templateParameterList_2:createTemplateParameter", e ); //$NON-NLS-1$ logException( "templateParameterList_2:createTemplateParameter", e ); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, lnum); throwBacktrack(startingOffset, endOffset, lnum, fn);
} }
} }
else if (LT(1) == IToken.tCOMMA) else if (LT(1) == IToken.tCOMMA)
@ -767,12 +768,12 @@ public abstract class Parser extends ExpressionParser implements IParser
declarator.getInitializerClause(), declarator.getInitializerClause(),
wrapper.getStartingOffset(), wrapper.getStartingLine(), wrapper.getStartingOffset(), wrapper.getStartingLine(),
declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(),
wrapper.getEndOffset(), wrapper.getEndLine()), wrapper.getEndOffset(), wrapper.getEndLine(), fn ),
null, null,
( parameterScope instanceof IASTCodeScope ) ? (IASTCodeScope) parameterScope : null, ( parameterScope instanceof IASTCodeScope ) ? (IASTCodeScope) parameterScope : null,
wrapper.getStartingOffset(), wrapper.getStartingLine(), wrapper.getStartingOffset(), wrapper.getStartingLine(),
declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(),
wrapper.getEndOffset(), wrapper.getEndLine() )); wrapper.getEndOffset(), wrapper.getEndLine(), fn ));
} }
catch( ASTSemanticException ase ) catch( ASTSemanticException ase )
{ {
@ -782,7 +783,7 @@ public abstract class Parser extends ExpressionParser implements IParser
{ {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
logException( "templateParameterList:createParameterDeclaration", e ); //$NON-NLS-1$ logException( "templateParameterList:createParameterDeclaration", e ); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, lnum); throwBacktrack(startingOffset, endOffset, lnum, fn);
} }
} }
} }
@ -835,12 +836,12 @@ public abstract class Parser extends ExpressionParser implements IParser
scope, scope,
assembly, assembly,
first.getOffset(), first.getOffset(),
first.getLineNumber(), last.getEndOffset(), last.getLineNumber()); first.getLineNumber(), last.getEndOffset(), last.getLineNumber(), last.getFilename());
} }
catch (Exception e) catch (Exception e)
{ {
logException( "declaration:createASMDefinition", e ); //$NON-NLS-1$ logException( "declaration:createASMDefinition", e ); //$NON-NLS-1$
throwBacktrack(first.getOffset(), last.getEndOffset(), first.getLineNumber()); throwBacktrack(first.getOffset(), last.getEndOffset(), first.getLineNumber(), first.getFilename());
} }
// if we made it this far, then we have all we need // if we made it this far, then we have all we need
// do the callback // do the callback
@ -986,13 +987,13 @@ public abstract class Parser extends ExpressionParser implements IParser
first.getLineNumber(), first.getLineNumber(),
(identifier == null ? first.getOffset() : identifier.getOffset()), (identifier == null ? first.getOffset() : identifier.getOffset()),
(identifier == null ? first.getEndOffset() : identifier.getEndOffset() ), (identifier == null ? first.getEndOffset() : identifier.getEndOffset() ),
(identifier == null ? first.getLineNumber() : identifier.getLineNumber() )); (identifier == null ? first.getLineNumber() : identifier.getLineNumber() ), first.getFilename());
} }
catch (Exception e1) catch (Exception e1)
{ {
logException( "namespaceDefinition:createNamespaceDefinition", e1 ); //$NON-NLS-1$ logException( "namespaceDefinition:createNamespaceDefinition", e1 ); //$NON-NLS-1$
throwBacktrack(first.getOffset(), lbrace.getEndOffset(), first.getLineNumber()); throwBacktrack(first.getOffset(), lbrace.getEndOffset(), first.getLineNumber(), first.getFilename());
return null; return null;
} }
namespaceDefinition.enterScope( requestor, astFactory.getReferenceManager() ); namespaceDefinition.enterScope( requestor, astFactory.getReferenceManager() );
@ -1038,7 +1039,7 @@ public abstract class Parser extends ExpressionParser implements IParser
if( identifier == null ) if( identifier == null )
{ {
throwBacktrack(first.getOffset(), assign.getEndOffset(), first.getLineNumber()); throwBacktrack(first.getOffset(), assign.getEndOffset(), first.getLineNumber(), first.getFilename());
return null; return null;
} }
@ -1055,7 +1056,7 @@ public abstract class Parser extends ExpressionParser implements IParser
catch (Exception e1) catch (Exception e1)
{ {
logException( "namespaceDefinition:createNamespaceAlias", e1 ); //$NON-NLS-1$ logException( "namespaceDefinition:createNamespaceAlias", e1 ); //$NON-NLS-1$
throwBacktrack(first.getOffset(), semi.getEndOffset(), first.getLineNumber()); throwBacktrack(first.getOffset(), semi.getEndOffset(), first.getLineNumber(), first.getFilename());
return null; return null;
} }
return alias; return alias;
@ -1063,7 +1064,7 @@ public abstract class Parser extends ExpressionParser implements IParser
else else
{ {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
throwBacktrack(first.getOffset(), endOffset, first.getLineNumber()); throwBacktrack(first.getOffset(), endOffset, first.getLineNumber(), first.getFilename());
return null; return null;
} }
} }
@ -1097,9 +1098,10 @@ public abstract class Parser extends ExpressionParser implements IParser
IToken firstToken = LA(1); IToken firstToken = LA(1);
int firstOffset = firstToken.getOffset(); int firstOffset = firstToken.getOffset();
int firstLine = firstToken.getLineNumber(); int firstLine = firstToken.getLineNumber();
if( firstToken.getType() == IToken.tLBRACE ) throwBacktrack(firstToken.getOffset(), firstToken.getEndOffset(), firstToken.getLineNumber()); char [] fn = firstToken.getFilename();
if( firstToken.getType() == IToken.tLBRACE ) throwBacktrack(firstToken.getOffset(), firstToken.getEndOffset(), firstToken.getLineNumber(), firstToken.getFilename());
DeclarationWrapper sdw = DeclarationWrapper sdw =
new DeclarationWrapper(scope, firstToken.getOffset(), firstToken.getLineNumber(), ownerTemplate); new DeclarationWrapper(scope, firstToken.getOffset(), firstToken.getLineNumber(), ownerTemplate, fn);
firstToken = null; // necessary for scalability firstToken = null; // necessary for scalability
CompletionKind completionKindForDeclaration = getCompletionKindForDeclaration(scope, overideKind); CompletionKind completionKindForDeclaration = getCompletionKindForDeclaration(scope, overideKind);
@ -1132,7 +1134,7 @@ public abstract class Parser extends ExpressionParser implements IParser
if( e1 instanceof ASTSemanticException && ((ASTSemanticException)e1).getProblem() != null ) if( e1 instanceof ASTSemanticException && ((ASTSemanticException)e1).getProblem() != null )
throwBacktrack(((ASTSemanticException)e1).getProblem()); throwBacktrack(((ASTSemanticException)e1).getProblem());
else else
throwBacktrack(firstOffset, endOffset, firstLine); throwBacktrack(firstOffset, endOffset, firstLine, fn);
} }
try { try {
@ -1173,10 +1175,10 @@ public abstract class Parser extends ExpressionParser implements IParser
break; break;
case IToken.tRPAREN: case IToken.tRPAREN:
if( ! fromCatchHandler ) if( ! fromCatchHandler )
throwBacktrack(firstOffset, LA(1).getEndOffset(), LA(1).getLineNumber()); throwBacktrack(firstOffset, LA(1).getEndOffset(), LA(1).getLineNumber(), fn);
break; break;
default: default:
throwBacktrack(firstOffset, LA(1).getEndOffset(), LA(1).getLineNumber()); throwBacktrack(firstOffset, LA(1).getEndOffset(), LA(1).getLineNumber(), fn);
} }
if( ! consumedSemi ) if( ! consumedSemi )
@ -1188,7 +1190,7 @@ public abstract class Parser extends ExpressionParser implements IParser
} }
if( hasFunctionTryBlock && ! hasFunctionBody ) if( hasFunctionTryBlock && ! hasFunctionBody )
throwBacktrack(firstOffset, LA(1).getEndOffset(), LA(1).getLineNumber()); throwBacktrack(firstOffset, LA(1).getEndOffset(), LA(1).getLineNumber(), fn);
} }
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
List l = null; List l = null;
@ -1204,7 +1206,7 @@ public abstract class Parser extends ExpressionParser implements IParser
sdw.getStartingOffset(), sdw.getStartingOffset(),
lastToken != null ? lastToken.getEndOffset() : 0, lastToken != null ? lastToken.getEndOffset() : 0,
sdw.getStartingLine(), sdw.getStartingLine(),
scanner.getCurrentFilename(), fn,
EMPTY_STRING, false, true ); EMPTY_STRING, false, true );
throwBacktrack( p ); throwBacktrack( p );
} else { } else {
@ -1214,12 +1216,12 @@ public abstract class Parser extends ExpressionParser implements IParser
catch( Exception e ) catch( Exception e )
{ {
logException( "simpleDecl", e ); //$NON-NLS-1$ logException( "simpleDecl", e ); //$NON-NLS-1$
throwBacktrack(firstOffset, endOffset, firstLine); throwBacktrack(firstOffset, endOffset, firstLine, fn);
} }
if (hasFunctionBody && l.size() != 1) if (hasFunctionBody && l.size() != 1)
{ {
throwBacktrack(firstOffset, endOffset, firstLine); //TODO Should be an IProblem throwBacktrack(firstOffset, endOffset, firstLine, fn); //TODO Should be an IProblem
} }
if (!l.isEmpty()) // no need to do this unless we have a declarator if (!l.isEmpty()) // no need to do this unless we have a declarator
{ {
@ -1245,7 +1247,7 @@ public abstract class Parser extends ExpressionParser implements IParser
((IASTSimpleTypeSpecifier)sdw.getTypeSpecifier()).releaseReferences( astFactory.getReferenceManager() ); ((IASTSimpleTypeSpecifier)sdw.getTypeSpecifier()).releaseReferences( astFactory.getReferenceManager() );
if ( !( declaration instanceof IASTScope ) ) if ( !( declaration instanceof IASTScope ) )
throwBacktrack(firstOffset, endOffset, firstLine); throwBacktrack(firstOffset, endOffset, firstLine, fn);
handleFunctionBody((IASTScope)declaration ); handleFunctionBody((IASTScope)declaration );
((IASTOffsetableElement)declaration).setEndingOffsetAndLineNumber( ((IASTOffsetableElement)declaration).setEndingOffsetAndLineNumber(
@ -1270,7 +1272,7 @@ public abstract class Parser extends ExpressionParser implements IParser
ownerTemplate, ownerTemplate,
sdw.getStartingOffset(), sdw.getStartingOffset(),
sdw.getStartingLine(), lastToken.getEndOffset(), lastToken.getLineNumber(), sdw.getStartingLine(), lastToken.getEndOffset(), lastToken.getLineNumber(),
sdw.isFriend()); sdw.isFriend(), lastToken.getFilename());
declaration.acceptElement(requestor, astFactory.getReferenceManager()); declaration.acceptElement(requestor, astFactory.getReferenceManager());
return declaration; return declaration;
} }
@ -1278,7 +1280,7 @@ public abstract class Parser extends ExpressionParser implements IParser
catch (Exception e1) catch (Exception e1)
{ {
logException( "simpleDeclaration:createTypeSpecDeclaration", e1 ); //$NON-NLS-1$ logException( "simpleDeclaration:createTypeSpecDeclaration", e1 ); //$NON-NLS-1$
throwBacktrack(firstOffset, endOffset, firstLine); throwBacktrack(firstOffset, endOffset, firstLine, fn);
} }
return null; return null;
@ -1360,7 +1362,7 @@ public abstract class Parser extends ExpressionParser implements IParser
catch (Exception e1) catch (Exception e1)
{ {
logException( "ctorInitializer:addConstructorMemberInitializer", e1 ); //$NON-NLS-1$ logException( "ctorInitializer:addConstructorMemberInitializer", e1 ); //$NON-NLS-1$
throwBacktrack(startingOffset, rparen.getEndOffset(), rparen.getLineNumber()); throwBacktrack(startingOffset, rparen.getEndOffset(), rparen.getLineNumber(), rparen.getFilename());
} }
if (LT(1) == IToken.tLBRACE) if (LT(1) == IToken.tLBRACE)
break; break;
@ -1387,7 +1389,7 @@ public abstract class Parser extends ExpressionParser implements IParser
IToken current = LA(1); IToken current = LA(1);
DeclarationWrapper sdw = DeclarationWrapper sdw =
new DeclarationWrapper(scope, current.getOffset(), current.getLineNumber(), null); new DeclarationWrapper(scope, current.getOffset(), current.getLineNumber(), null, current.getFilename());
declSpecifierSeq(sdw, true, false, CompletionKind.ARGUMENT_TYPE, KeywordSetKey.DECL_SPECIFIER_SEQUENCE ); declSpecifierSeq(sdw, true, false, CompletionKind.ARGUMENT_TYPE, KeywordSetKey.DECL_SPECIFIER_SEQUENCE );
if (sdw.getTypeSpecifier() == null if (sdw.getTypeSpecifier() == null
&& sdw.getSimpleType() && sdw.getSimpleType()
@ -1416,7 +1418,7 @@ public abstract class Parser extends ExpressionParser implements IParser
{ {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
logException( "parameterDeclaration:createSimpleTypeSpecifier", e ); //$NON-NLS-1$ logException( "parameterDeclaration:createSimpleTypeSpecifier", e ); //$NON-NLS-1$
throwBacktrack(current.getOffset(), endOffset, current.getLineNumber()); throwBacktrack(current.getOffset(), endOffset, current.getLineNumber(), current.getFilename());
} }
setCompletionValues(scope,CompletionKind.SINGLE_NAME_REFERENCE,KeywordSetKey.EMPTY ); setCompletionValues(scope,CompletionKind.SINGLE_NAME_REFERENCE,KeywordSetKey.EMPTY );
@ -1429,7 +1431,7 @@ public abstract class Parser extends ExpressionParser implements IParser
if (current == LA(1)) if (current == LA(1))
{ {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
throwBacktrack(current.getOffset(), endOffset, current.getLineNumber()); throwBacktrack(current.getOffset(), endOffset, current.getLineNumber(), current.getFilename());
} }
collection.addParameter(sdw); collection.addParameter(sdw);
} }
@ -1920,7 +1922,7 @@ public abstract class Parser extends ExpressionParser implements IParser
break; break;
default : default :
backup(t); backup(t);
throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename());
} }
ITokenDuple d = name(sdw.getScope(), completionKind, ITokenDuple d = name(sdw.getScope(), completionKind,
@ -1939,7 +1941,7 @@ public abstract class Parser extends ExpressionParser implements IParser
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
logException( logException(
"elaboratedTypeSpecifier:createElaboratedTypeSpecifier", e); //$NON-NLS-1$ "elaboratedTypeSpecifier:createElaboratedTypeSpecifier", e); //$NON-NLS-1$
throwBacktrack(t.getOffset(), endOffset, t.getLineNumber()); throwBacktrack(t.getOffset(), endOffset, t.getLineNumber(), t.getFilename());
} }
sdw.setTypeSpecifier(elaboratedTypeSpec); sdw.setTypeSpecifier(elaboratedTypeSpec);
@ -1947,7 +1949,6 @@ public abstract class Parser extends ExpressionParser implements IParser
{ {
((IASTElaboratedTypeSpecifier) elaboratedTypeSpec).acceptElement( ((IASTElaboratedTypeSpecifier) elaboratedTypeSpec).acceptElement(
requestor, astFactory.getReferenceManager()); requestor, astFactory.getReferenceManager());
handleOffsetableNamedElement((IASTOffsetableNamedElement) elaboratedTypeSpec);
} }
} }
/** /**
@ -2060,8 +2061,11 @@ public abstract class Parser extends ExpressionParser implements IParser
protected IASTInitializerClause cInitializerClause(IASTScope scope, protected IASTInitializerClause cInitializerClause(IASTScope scope,
List designators, boolean constructInitializers) List designators, boolean constructInitializers)
throws EndOfFileException, BacktrackException { throws EndOfFileException, BacktrackException {
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
la = null;
if (LT(1) == IToken.tLBRACE) { if (LT(1) == IToken.tLBRACE) {
consume(IToken.tLBRACE); consume(IToken.tLBRACE);
List initializerList = new ArrayList(); List initializerList = new ArrayList();
@ -2085,7 +2089,8 @@ public abstract class Parser extends ExpressionParser implements IParser
if (LT(1) == IToken.tRBRACE) if (LT(1) == IToken.tRBRACE)
break; break;
if (checkHashcode == LA(1).hashCode()) { if (checkHashcode == LA(1).hashCode()) {
throwBacktrack(startingOffset, LA(1).getEndOffset(), LA(1).getLineNumber()); IToken l2 = LA(1);
throwBacktrack(startingOffset, l2.getEndOffset(), l2.getLineNumber(), l2.getFilename());
return null; return null;
} }
@ -2116,13 +2121,13 @@ public abstract class Parser extends ExpressionParser implements IParser
} catch (Exception e) { } catch (Exception e) {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
logException("cInitializerClause:createInitializerClause", e); //$NON-NLS-1$ logException("cInitializerClause:createInitializerClause", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
} catch (BacktrackException b) { } catch (BacktrackException b) {
// do nothing // do nothing
} }
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
return null; return null;
} }
/** /**
@ -2143,7 +2148,7 @@ public abstract class Parser extends ExpressionParser implements IParser
} catch (Exception e) { } catch (Exception e) {
logException( logException(
"initializerClause_1:createInitializerClause", e); //$NON-NLS-1$ "initializerClause_1:createInitializerClause", e); //$NON-NLS-1$
throwBacktrack(t.getOffset(), last.getEndOffset(), t.getLineNumber()); throwBacktrack(t.getOffset(), last.getEndOffset(), t.getLineNumber(), last.getFilename());
return null; return null;
} }
} }
@ -2173,7 +2178,7 @@ public abstract class Parser extends ExpressionParser implements IParser
constructInitializers); constructInitializers);
} catch (Exception e) { } catch (Exception e) {
logException("initializerClause_2:createInitializerClause", e); //$NON-NLS-1$ logException("initializerClause_2:createInitializerClause", e); //$NON-NLS-1$
throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber()); throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber(), last.getFilename());
return null; return null;
} }
} }
@ -2181,8 +2186,11 @@ public abstract class Parser extends ExpressionParser implements IParser
// if we get this far, it means that we did not // if we get this far, it means that we did not
// try this now instead // try this now instead
// assignmentExpression // assignmentExpression
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); char [] fn = la.getFilename();
int startingOffset = la.getOffset();
int line = la.getLineNumber();
la = null;
IASTExpression assignmentExpression = assignmentExpression(scope, IASTExpression assignmentExpression = assignmentExpression(scope,
CompletionKind.SINGLE_NAME_REFERENCE, CompletionKind.SINGLE_NAME_REFERENCE,
@ -2196,7 +2204,7 @@ public abstract class Parser extends ExpressionParser implements IParser
} catch (Exception e) { } catch (Exception e) {
logException("initializerClause_3:createInitializerClause", e); //$NON-NLS-1$ logException("initializerClause_3:createInitializerClause", e); //$NON-NLS-1$
} }
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
return null; return null;
} }
@ -2293,8 +2301,11 @@ public abstract class Parser extends ExpressionParser implements IParser
throws EndOfFileException, BacktrackException { throws EndOfFileException, BacktrackException {
Declarator d = null; Declarator d = null;
DeclarationWrapper sdw = owner.getDeclarationWrapper(); DeclarationWrapper sdw = owner.getDeclarationWrapper();
int startingOffset = LA(1).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); int startingOffset = la.getOffset();
int line = la.getLineNumber();
char [] fn = la.getFilename();
la = null;
overallLoop : do { overallLoop : do {
d = new Declarator(owner); d = new Declarator(owner);
@ -2335,7 +2346,7 @@ public abstract class Parser extends ExpressionParser implements IParser
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
logException( logException(
"declarator:queryIsTypeName", e); //$NON-NLS-1$ "declarator:queryIsTypeName", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, newMark.getFilename());
} }
} catch (BacktrackException b) { } catch (BacktrackException b) {
failed = true; failed = true;
@ -2382,7 +2393,7 @@ public abstract class Parser extends ExpressionParser implements IParser
default : default :
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
if (seenParameter) if (seenParameter)
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
parameterDeclaration(d, parameterScope); parameterDeclaration(d, parameterScope);
seenParameter = true; seenParameter = true;
} }
@ -2459,7 +2470,7 @@ public abstract class Parser extends ExpressionParser implements IParser
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
logException( logException(
"declarator:createExceptionSpecification", e); //$NON-NLS-1$ "declarator:createExceptionSpecification", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
} }
// check for optional pure virtual // check for optional pure virtual
@ -2563,7 +2574,7 @@ public abstract class Parser extends ExpressionParser implements IParser
else { else {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
backup(mark); backup(mark);
throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename());
} }
} }
} }
@ -2609,13 +2620,13 @@ public abstract class Parser extends ExpressionParser implements IParser
.getEndOffset() : identifier.getEndOffset()), .getEndOffset() : identifier.getEndOffset()),
((identifier == null) ((identifier == null)
? mark.getLineNumber() ? mark.getLineNumber()
: identifier.getLineNumber())); : identifier.getLineNumber()), mark.getFilename());
} catch (ASTSemanticException e) { } catch (ASTSemanticException e) {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
logException("enumSpecifier:createEnumerationSpecifier", e); //$NON-NLS-1$ logException("enumSpecifier:createEnumerationSpecifier", e); //$NON-NLS-1$
throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename());
} }
handleEnumeration( enumeration ); handleEnumeration( enumeration );
consume(IToken.tLBRACE); consume(IToken.tLBRACE);
@ -2625,7 +2636,7 @@ public abstract class Parser extends ExpressionParser implements IParser
enumeratorIdentifier = identifier(); enumeratorIdentifier = identifier();
} else { } else {
IToken la = LA(1); IToken la = LA(1);
throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber()); throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber(), la.getFilename());
} }
IASTExpression initialValue = null; IASTExpression initialValue = null;
if (LT(1) == IToken.tASSIGN) { if (LT(1) == IToken.tASSIGN) {
@ -2645,14 +2656,14 @@ public abstract class Parser extends ExpressionParser implements IParser
enumeratorIdentifier.getEndOffset(), enumeratorIdentifier.getEndOffset(),
enumeratorIdentifier.getLineNumber(), lastToken enumeratorIdentifier.getLineNumber(), lastToken
.getEndOffset(), lastToken .getEndOffset(), lastToken
.getLineNumber(), initialValue); .getLineNumber(), initialValue, lastToken.getFilename());
endEnumerator(enumerator); endEnumerator(enumerator);
} catch (ASTSemanticException e1) { } catch (ASTSemanticException e1) {
throwBacktrack(e1.getProblem()); throwBacktrack(e1.getProblem());
} catch (Exception e) { } catch (Exception e) {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
logException("enumSpecifier:addEnumerator", e); //$NON-NLS-1$ logException("enumSpecifier:addEnumerator", e); //$NON-NLS-1$
throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename());
} }
break; break;
} }
@ -2663,7 +2674,7 @@ public abstract class Parser extends ExpressionParser implements IParser
enumerator.freeReferences(astFactory enumerator.freeReferences(astFactory
.getReferenceManager()); .getReferenceManager());
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename());
} }
try { try {
enumerator = astFactory.addEnumerator(enumeration, enumerator = astFactory.addEnumerator(enumeration,
@ -2674,14 +2685,14 @@ public abstract class Parser extends ExpressionParser implements IParser
enumeratorIdentifier.getEndOffset(), enumeratorIdentifier.getEndOffset(),
enumeratorIdentifier.getLineNumber(), lastToken enumeratorIdentifier.getLineNumber(), lastToken
.getEndOffset(), lastToken.getLineNumber(), .getEndOffset(), lastToken.getLineNumber(),
initialValue); initialValue, lastToken.getFilename());
endEnumerator(enumerator); endEnumerator(enumerator);
} catch (ASTSemanticException e1) { } catch (ASTSemanticException e1) {
throwBacktrack(e1.getProblem()); throwBacktrack(e1.getProblem());
} catch (Exception e) { } catch (Exception e) {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
logException("enumSpecifier:addEnumerator", e); //$NON-NLS-1$ logException("enumSpecifier:addEnumerator", e); //$NON-NLS-1$
throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename());
} }
consume(IToken.tCOMMA); consume(IToken.tCOMMA);
} }
@ -2695,7 +2706,7 @@ public abstract class Parser extends ExpressionParser implements IParser
// enumSpecifierAbort // enumSpecifierAbort
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
backup(mark); backup(mark);
throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename());
} }
} }
/** /**
@ -2738,7 +2749,7 @@ public abstract class Parser extends ExpressionParser implements IParser
completionKind = CompletionKind.UNION_REFERENCE; completionKind = CompletionKind.UNION_REFERENCE;
break; break;
default : default :
throwBacktrack(mark.getOffset(), mark.getEndOffset(), mark.getLineNumber()); throwBacktrack(mark.getOffset(), mark.getEndOffset(), mark.getLineNumber(), mark.getFilename());
} }
ITokenDuple duple = null; ITokenDuple duple = null;
@ -2752,7 +2763,7 @@ public abstract class Parser extends ExpressionParser implements IParser
if (LT(1) != IToken.tCOLON && LT(1) != IToken.tLBRACE) { if (LT(1) != IToken.tCOLON && LT(1) != IToken.tLBRACE) {
IToken errorPoint = LA(1); IToken errorPoint = LA(1);
backup(mark); backup(mark);
throwBacktrack(errorPoint.getOffset(), errorPoint.getEndOffset(), errorPoint.getLineNumber()); throwBacktrack(errorPoint.getOffset(), errorPoint.getEndOffset(), errorPoint.getLineNumber(), errorPoint.getFilename());
} }
IASTClassSpecifier astClassSpecifier = null; IASTClassSpecifier astClassSpecifier = null;
@ -2764,13 +2775,13 @@ public abstract class Parser extends ExpressionParser implements IParser
duple == null ? classKey.getEndOffset() : duple duple == null ? classKey.getEndOffset() : duple
.getFirstToken().getEndOffset(), duple == null .getFirstToken().getEndOffset(), duple == null
? classKey.getLineNumber() ? classKey.getLineNumber()
: duple.getFirstToken().getLineNumber()); : duple.getFirstToken().getLineNumber(), classKey.getFilename());
} catch (ASTSemanticException e) { } catch (ASTSemanticException e) {
throwBacktrack(e.getProblem()); throwBacktrack(e.getProblem());
} catch (Exception e) { } catch (Exception e) {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
logException("classSpecifier:createClassSpecifier", e); //$NON-NLS-1$ logException("classSpecifier:createClassSpecifier", e); //$NON-NLS-1$
throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename());
} }
sdw.setTypeSpecifier(astClassSpecifier); sdw.setTypeSpecifier(astClassSpecifier);
// base clause // base clause
@ -2830,7 +2841,7 @@ public abstract class Parser extends ExpressionParser implements IParser
astFactory.signalEndOfClassSpecifier(astClassSpecifier); astFactory.signalEndOfClassSpecifier(astClassSpecifier);
} catch (Exception e1) { } catch (Exception e1) {
logException("classSpecifier:signalEndOfClassSpecifier", e1); //$NON-NLS-1$ logException("classSpecifier:signalEndOfClassSpecifier", e1); //$NON-NLS-1$
throwBacktrack(lt.getOffset(), lt.getEndOffset(), lt.getLineNumber()); throwBacktrack(lt.getOffset(), lt.getEndOffset(), lt.getLineNumber(), lt.getFilename());
} }
astClassSpecifier.exitScope(requestor, astFactory astClassSpecifier.exitScope(requestor, astFactory
@ -2855,8 +2866,12 @@ public abstract class Parser extends ExpressionParser implements IParser
IASTClassSpecifier astClassSpec) IASTClassSpecifier astClassSpec)
throws EndOfFileException, BacktrackException throws EndOfFileException, BacktrackException
{ {
int startingOffset = consume(IToken.tCOLON).getOffset(); IToken la = LA(1);
int line = LA(1).getLineNumber(); char [] fn = la.getFilename();
int startingOffset = la.getOffset();
int line = la.getLineNumber();
la = null;
consume(IToken.tCOLON);
setCompletionValues(astClassSpec.getOwnerScope(), CompletionKind.CLASS_REFERENCE, KeywordSetKey.BASE_SPECIFIER ); setCompletionValues(astClassSpec.getOwnerScope(), CompletionKind.CLASS_REFERENCE, KeywordSetKey.BASE_SPECIFIER );
boolean isVirtual = false; boolean isVirtual = false;
@ -2942,7 +2957,7 @@ public abstract class Parser extends ExpressionParser implements IParser
{ {
int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ;
logException( "baseSpecifier_2::addBaseSpecifier", e ); //$NON-NLS-1$ logException( "baseSpecifier_2::addBaseSpecifier", e ); //$NON-NLS-1$
throwBacktrack( startingOffset, endOffset, line ); throwBacktrack( startingOffset, endOffset, line, fn );
} }
} }
@ -3148,7 +3163,7 @@ public abstract class Parser extends ExpressionParser implements IParser
if (LT(1) != IToken.t_catch) if (LT(1) != IToken.t_catch)
{ {
IToken la = LA(1); IToken la = LA(1);
throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber()); // error, need at least one of these throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber(), la.getFilename()); // error, need at least one of these
} }
while (LT(1) == IToken.t_catch) { while (LT(1) == IToken.t_catch) {
consume(IToken.t_catch); consume(IToken.t_catch);
@ -3182,7 +3197,7 @@ public abstract class Parser extends ExpressionParser implements IParser
} catch (Exception e) { } catch (Exception e) {
logException("singleStatementScope:createNewCodeBlock", e); //$NON-NLS-1$ logException("singleStatementScope:createNewCodeBlock", e); //$NON-NLS-1$
IToken la = LA(1); IToken la = LA(1);
throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber()); throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber(), la.getFilename());
return; return;
} }
newScope.enterScope(requestor, astFactory.getReferenceManager()); newScope.enterScope(requestor, astFactory.getReferenceManager());
@ -3235,7 +3250,9 @@ public abstract class Parser extends ExpressionParser implements IParser
*/ */
protected void compoundStatement(IASTScope scope, boolean createNewScope) protected void compoundStatement(IASTScope scope, boolean createNewScope)
throws EndOfFileException, BacktrackException { throws EndOfFileException, BacktrackException {
int line = LA(1).getLineNumber(); IToken la = LA(1);
int line = la.getLineNumber();
char [] fn = la.getFilename();
int startingOffset = consume(IToken.tLBRACE).getOffset(); int startingOffset = consume(IToken.tLBRACE).getOffset();
IASTCodeScope newScope = null; IASTCodeScope newScope = null;
@ -3245,7 +3262,7 @@ public abstract class Parser extends ExpressionParser implements IParser
} catch (Exception e) { } catch (Exception e) {
int endOffset = ( lastToken == null ) ? 0 : lastToken.getEndOffset(); int endOffset = ( lastToken == null ) ? 0 : lastToken.getEndOffset();
logException("compoundStatement:createNewCodeBlock", e); //$NON-NLS-1$ logException("compoundStatement:createNewCodeBlock", e); //$NON-NLS-1$
throwBacktrack(startingOffset, endOffset, line); throwBacktrack(startingOffset, endOffset, line, fn);
} }
newScope.enterScope(requestor, astFactory.getReferenceManager()); newScope.enterScope(requestor, astFactory.getReferenceManager());
} }
@ -3354,14 +3371,11 @@ public abstract class Parser extends ExpressionParser implements IParser
protected void endDeclaration(IASTDeclaration declaration) protected void endDeclaration(IASTDeclaration declaration)
throws EndOfFileException { throws EndOfFileException {
cleanupLastToken(); cleanupLastToken();
if (declaration instanceof IASTOffsetableNamedElement)
handleOffsetableNamedElement((IASTOffsetableNamedElement) declaration);
} }
protected void endEnumerator(IASTEnumerator enumerator) protected void endEnumerator(IASTEnumerator enumerator)
throws EndOfFileException { throws EndOfFileException {
cleanupLastToken(); cleanupLastToken();
handleOffsetableNamedElement(enumerator);
} }
/** /**
@ -3381,17 +3395,11 @@ public abstract class Parser extends ExpressionParser implements IParser
protected void handleClassSpecifier(IASTClassSpecifier classSpecifier) protected void handleClassSpecifier(IASTClassSpecifier classSpecifier)
throws EndOfFileException { throws EndOfFileException {
cleanupLastToken(); cleanupLastToken();
handleOffsetableNamedElement(classSpecifier);
} }
protected void handleEnumeration(IASTEnumerationSpecifier enumeration) throws EndOfFileException { protected void handleEnumeration(IASTEnumerationSpecifier enumeration) throws EndOfFileException {
cleanupLastToken(); cleanupLastToken();
handleOffsetableNamedElement( enumeration );
} /** } /**
* @param expression
*/
protected void handleOffsetableNamedElement(IASTOffsetableNamedElement node) {
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IParser#cancel() * @see org.eclipse.cdt.core.parser.IParser#cancel()

View file

@ -71,7 +71,7 @@ public class QuickParser extends Parser {
* @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setupASTFactory(org.eclipse.cdt.core.parser.IScanner, org.eclipse.cdt.core.parser.ParserLanguage) * @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setupASTFactory(org.eclipse.cdt.core.parser.IScanner, org.eclipse.cdt.core.parser.ParserLanguage)
*/ */
protected void setupASTFactory(IScanner scanner, ParserLanguage language) { protected void setupASTFactory(IScanner scanner, ParserLanguage language) {
astFactory = ParserFactory.createASTFactory( this, ParserMode.QUICK_PARSE, language); astFactory = ParserFactory.createASTFactory( ParserMode.QUICK_PARSE, language);
scanner.setASTFactory(astFactory); scanner.setASTFactory(astFactory);
astFactory.setLogger(log); astFactory.setLogger(log);
} }

View file

@ -11,9 +11,7 @@
package org.eclipse.cdt.internal.core.parser; package org.eclipse.cdt.internal.core.parser;
import java.util.Arrays; import java.util.Arrays;
import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map;
import org.eclipse.cdt.core.parser.EndOfFileException; import org.eclipse.cdt.core.parser.EndOfFileException;
import org.eclipse.cdt.core.parser.IParserLogService; import org.eclipse.cdt.core.parser.IParserLogService;
@ -30,11 +28,10 @@ import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier; import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTEnumerator; import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
import org.eclipse.cdt.core.parser.ast.IASTExpression; import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTFunction;
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause; import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTNode;
import org.eclipse.cdt.core.parser.ast.IASTOffsetableElement;
import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement; import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement; import org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement;
import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTVariable; import org.eclipse.cdt.core.parser.ast.IASTVariable;
@ -56,8 +53,6 @@ public class SelectionParser extends ContextualParser {
private ITokenDuple greaterContextDuple = null; private ITokenDuple greaterContextDuple = null;
private boolean pastPointOfSelection = false; private boolean pastPointOfSelection = false;
private IASTNode contextNode = null; private IASTNode contextNode = null;
private static final int DEFAULT_MAP_SIZE = 512;
private static final float DEFAULT_FLOAT_SIZE = 0.75f;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.Parser#handleNewToken(org.eclipse.cdt.core.parser.IToken) * @see org.eclipse.cdt.internal.core.parser.Parser#handleNewToken(org.eclipse.cdt.core.parser.IToken)
@ -169,20 +164,7 @@ public class SelectionParser extends ContextualParser {
IASTNode node = lookupNode(finalDuple); IASTNode node = lookupNode(finalDuple);
if( node == null ) return null; if( node == null ) return null;
if( !(node instanceof IASTOffsetableNamedElement )) return null; if( !(node instanceof IASTOffsetableNamedElement )) return null;
Integer lookupResult = ((Integer)nodeTable.get(node)); return new SelectionParseResult( (IASTOffsetableNamedElement) node, new String( ((IASTOffsetableElement)node).getFilename() ));
int indexValue = ( lookupResult != null ) ? lookupResult.intValue() : -1;
if( indexValue == -1 && node instanceof IASTParameterDeclaration )
{
try {
IASTFunction f = ((IASTParameterDeclaration)node).getOwnerFunctionDeclaration();
lookupResult = ((Integer)nodeTable.get(f));
indexValue = ( lookupResult != null ) ? lookupResult.intValue() : -1;
} catch (ASTNotImplementedException e) {
}
}
return new SelectionParseResult( (IASTOffsetableNamedElement) node, getFilenameForIndex(indexValue) );
} }
@ -295,7 +277,6 @@ public class SelectionParser extends ContextualParser {
else else
{ {
contextNode = declaration; contextNode = declaration;
handleOffsetableNamedElement((IASTOffsetableNamedElement) declaration);
throw new EndOfFileException(); throw new EndOfFileException();
} }
} }
@ -314,14 +295,6 @@ public class SelectionParser extends ContextualParser {
} }
protected Map nodeTable = new Hashtable( DEFAULT_MAP_SIZE, DEFAULT_FLOAT_SIZE );
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.Parser#handleNode(org.eclipse.cdt.core.parser.ast.IASTNode)
*/
protected void handleOffsetableNamedElement(IASTOffsetableNamedElement node) {
if( node != null )
nodeTable.put( node, new Integer( getCurrentFileIndex()) );
}
public static class SelectionParseResult implements ISelectionParseResult public static class SelectionParseResult implements ISelectionParseResult
{ {
@ -359,7 +332,6 @@ public class SelectionParser extends ContextualParser {
else else
{ {
contextNode = enumerator; contextNode = enumerator;
handleOffsetableNamedElement(enumerator);
throw new EndOfFileException(); throw new EndOfFileException();
} }
} }
@ -373,7 +345,6 @@ public class SelectionParser extends ContextualParser {
else else
{ {
contextNode = classSpecifier; contextNode = classSpecifier;
handleOffsetableNamedElement( classSpecifier );
throw new EndOfFileException(); throw new EndOfFileException();
} }
} }
@ -384,7 +355,6 @@ public class SelectionParser extends ContextualParser {
else else
{ {
contextNode = enumeration; contextNode = enumeration;
handleOffsetableNamedElement( enumeration );
throw new EndOfFileException(); throw new EndOfFileException();
} }
} }

View file

@ -77,7 +77,7 @@ public class StructuralParser extends Parser implements IParser {
* @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setupASTFactory(org.eclipse.cdt.core.parser.IScanner, org.eclipse.cdt.core.parser.ParserLanguage) * @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setupASTFactory(org.eclipse.cdt.core.parser.IScanner, org.eclipse.cdt.core.parser.ParserLanguage)
*/ */
protected void setupASTFactory(IScanner scanner, ParserLanguage language) { protected void setupASTFactory(IScanner scanner, ParserLanguage language) {
astFactory = ParserFactory.createASTFactory( this, ParserMode.COMPLETE_PARSE, language); astFactory = ParserFactory.createASTFactory( ParserMode.COMPLETE_PARSE, language);
scanner.setASTFactory(astFactory); scanner.setASTFactory(astFactory);
astFactory.setLogger(log); astFactory.setLogger(log);
} }

View file

@ -20,7 +20,7 @@ import org.eclipse.cdt.core.parser.ast.IReferenceManager;
*/ */
public class ASTInclusion implements IASTInclusion { public class ASTInclusion implements IASTInclusion {
public ASTInclusion( String name, String fileName, boolean local, int startingOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endLine ) public ASTInclusion( String name, String fileName, boolean local, int startingOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endLine, char [] fn )
{ {
this.name = name; this.name = name;
this.fileName = fileName; this.fileName = fileName;
@ -29,6 +29,7 @@ public class ASTInclusion implements IASTInclusion {
setNameOffset(nameOffset); setNameOffset(nameOffset);
setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine);
setEndingOffsetAndLineNumber(endOffset, endLine); setEndingOffsetAndLineNumber(endOffset, endLine);
this.filename = fn;
} }
private int nameEndOffset; private int nameEndOffset;
@ -179,6 +180,7 @@ public class ASTInclusion implements IASTInclusion {
} }
private int fileIndex; private int fileIndex;
private final char[] filename;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFileIndex() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFileIndex()
*/ */
@ -192,4 +194,11 @@ public class ASTInclusion implements IASTInclusion {
public void setFileIndex(int index) { public void setFileIndex(int index) {
fileIndex = index; fileIndex = index;
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return filename;
}
} }

View file

@ -26,8 +26,9 @@ public class ASTMacro implements IASTMacro {
private int nameEndOffset = 0; private int nameEndOffset = 0;
private final String name; private final String name;
private final IMacroDescriptor innerMacro; private final IMacroDescriptor innerMacro;
private final char[] fn;
public ASTMacro( String name, IMacroDescriptor info, int start, int startLine, int nameBeg, int nameEnd, int nameLine, int end, int endLine ) public ASTMacro( String name, IMacroDescriptor info, int start, int startLine, int nameBeg, int nameEnd, int nameLine, int end, int endLine, char[] fn )
{ {
this.name =name; this.name =name;
setStartingOffsetAndLineNumber(start, startLine); setStartingOffsetAndLineNumber(start, startLine);
@ -35,6 +36,7 @@ public class ASTMacro implements IASTMacro {
setNameEndOffsetAndLineNumber(nameEnd, nameLine); setNameEndOffsetAndLineNumber(nameEnd, nameLine);
setEndingOffsetAndLineNumber(end, endLine); setEndingOffsetAndLineNumber(end, endLine);
innerMacro = info; innerMacro = info;
this.fn = fn;
} }
private int startingOffset = 0, endingOffset = 0, nameOffset = 0; private int startingOffset = 0, endingOffset = 0, nameOffset = 0;
@ -202,5 +204,11 @@ public class ASTMacro implements IASTMacro {
public void setFileIndex(int index) { public void setFileIndex(int index) {
fileIndex = index; fileIndex = index;
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
} }

View file

@ -44,16 +44,16 @@ public class BaseASTFactory {
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createMacro(java.lang.String, int, int, int) * @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createMacro(java.lang.String, int, int, int)
*/ */
public IASTMacro createMacro(String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, IMacroDescriptor info) { public IASTMacro createMacro(String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, IMacroDescriptor info, char[] fn) {
IASTMacro m = new ASTMacro( name, info, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine ); IASTMacro m = new ASTMacro( name, info, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine, fn );
return m; return m;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createInclusion(java.lang.String, java.lang.String, boolean) * @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createInclusion(java.lang.String, java.lang.String, boolean)
*/ */
public IASTInclusion createInclusion(String name, String fileName, boolean local, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine) { public IASTInclusion createInclusion(String name, String fileName, boolean local, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn) {
IASTInclusion inclusion = new ASTInclusion( name, fileName, local, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine ); IASTInclusion inclusion = new ASTInclusion( name, fileName, local, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine, fn );
return inclusion; return inclusion;
} }

View file

@ -23,14 +23,16 @@ public class ASTASMDefinition extends ASTAnonymousDeclaration implements IASTASM
{ {
private final String assembly; private final String assembly;
/** /**
* @param filename
* *
*/ */
public ASTASMDefinition( IContainerSymbol scope, String assembly, int first, int firstLine, int last , int lastLine ) public ASTASMDefinition( IContainerSymbol scope, String assembly, int first, int firstLine, int last , int lastLine, char[] filename )
{ {
super( scope ); super( scope );
this.assembly = assembly; this.assembly = assembly;
setStartingOffsetAndLineNumber(first, firstLine); setStartingOffsetAndLineNumber(first, firstLine);
setEndingOffsetAndLineNumber(last, lastLine); setEndingOffsetAndLineNumber(last, lastLine);
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTASMDefinition#getBody() * @see org.eclipse.cdt.core.parser.ast.IASTASMDefinition#getBody()
@ -66,6 +68,7 @@ public class ASTASMDefinition extends ASTAnonymousDeclaration implements IASTASM
{ {
} }
private int startingLineNumber, startingOffset, endingLineNumber, endingOffset; private int startingLineNumber, startingOffset, endingLineNumber, endingOffset;
private final char[] fn;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine()
*/ */
@ -109,5 +112,11 @@ public class ASTASMDefinition extends ASTAnonymousDeclaration implements IASTASM
{ {
return endingOffset; return endingOffset;
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
} }

View file

@ -32,8 +32,9 @@ public class ASTAbstractTypeSpecifierDeclaration
/** /**
* @param ownerScope * @param ownerScope
* @param filename
*/ */
public ASTAbstractTypeSpecifierDeclaration(IContainerSymbol ownerScope, IASTTypeSpecifier typeSpecifier, IASTTemplate ownerTemplate, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend ) public ASTAbstractTypeSpecifierDeclaration(IContainerSymbol ownerScope, IASTTypeSpecifier typeSpecifier, IASTTemplate ownerTemplate, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend, char[] filename )
{ {
super(ownerScope); super(ownerScope);
this.typeSpec = typeSpecifier; this.typeSpec = typeSpecifier;
@ -41,6 +42,7 @@ public class ASTAbstractTypeSpecifierDeclaration
this.isFriendDeclaration = isFriend; this.isFriendDeclaration = isFriend;
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
setEndingOffsetAndLineNumber(endingOffset, endingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine);
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -100,6 +102,7 @@ public class ASTAbstractTypeSpecifierDeclaration
private int startingLineNumber, startingOffset, endingLineNumber, endingOffset; private int startingLineNumber, startingOffset, endingLineNumber, endingOffset;
private final char[] fn;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine()
*/ */
@ -143,4 +146,11 @@ public class ASTAbstractTypeSpecifierDeclaration
{ {
return endingOffset; return endingOffset;
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
} }

View file

@ -93,7 +93,7 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier
/** /**
* @param symbol * @param symbol
*/ */
public ASTClassSpecifier(ISymbol symbol, ASTClassKind kind, ClassNameType type, ASTAccessVisibility access, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references ) public ASTClassSpecifier(ISymbol symbol, ASTClassKind kind, ClassNameType type, ASTAccessVisibility access, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references, char [] filename )
{ {
super(symbol); super(symbol);
classKind = kind; classKind = kind;
@ -104,6 +104,7 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier
setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine);
qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), symbol.getName() ); qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), symbol.getName() );
this.references = references; this.references = references;
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getClassNameType() * @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getClassNameType()
@ -275,6 +276,7 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier
private int startingLineNumber, startingOffset, endingLineNumber, endingOffset, nameStartOffset, nameEndOffset, nameLineNumber; private int startingLineNumber, startingOffset, endingLineNumber, endingOffset, nameStartOffset, nameEndOffset, nameLineNumber;
private final char[] fn;
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine()
*/ */
@ -356,4 +358,10 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier
nameEndOffset = offset; nameEndOffset = offset;
nameLineNumber = lineNumber; nameLineNumber = lineNumber;
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
} }

View file

@ -35,8 +35,9 @@ public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElabora
* @param kind * @param kind
* @param startingOffset * @param startingOffset
* @param endOffset * @param endOffset
* @param filename
*/ */
public ASTElaboratedTypeSpecifier(ISymbol checkSymbol, ASTClassKind kind, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine, List references, boolean isDecl ) public ASTElaboratedTypeSpecifier(ISymbol checkSymbol, ASTClassKind kind, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine, List references, boolean isDecl, char[] filename )
{ {
super( checkSymbol ); super( checkSymbol );
this.kind = kind; this.kind = kind;
@ -47,6 +48,7 @@ public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElabora
qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), checkSymbol.getName() ); qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), checkSymbol.getName() );
isForwardDeclaration = isDecl; isForwardDeclaration = isDecl;
this.references = references; this.references = references;
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getName() * @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getName()
@ -212,4 +214,12 @@ public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElabora
nameEndOffset = offset; nameEndOffset = offset;
nameLineNumber = lineNumber; nameLineNumber = lineNumber;
} }
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
} }

View file

@ -31,16 +31,26 @@ public class ASTEnumerationSpecifier
implements IASTEnumerationSpecifier implements IASTEnumerationSpecifier
{ {
private final ASTQualifiedNamedElement qualifiedName; private final ASTQualifiedNamedElement qualifiedName;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param symbol * @param symbol
* @param filename
*/ */
public ASTEnumerationSpecifier(ISymbol symbol, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) public ASTEnumerationSpecifier(ISymbol symbol, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] filename )
{ {
super(symbol); super(symbol);
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
setNameOffset( nameOffset ); setNameOffset( nameOffset );
setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine);
qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), symbol.getName() ); qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), symbol.getName() );
fn = filename;
} }

View file

@ -26,13 +26,22 @@ public class ASTEnumerator extends ASTSymbol implements IASTEnumerator
private final IASTExpression initialValue; private final IASTExpression initialValue;
private final IASTEnumerationSpecifier owner; private final IASTEnumerationSpecifier owner;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param enumeratorSymbol * @param enumeratorSymbol
* @param startingOffset * @param startingOffset
* @param endingOffset * @param endingOffset
* @param initialValue * @param initialValue
* @param filename
*/ */
public ASTEnumerator(ISymbol enumeratorSymbol, IASTEnumerationSpecifier owner, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, IASTExpression initialValue) public ASTEnumerator(ISymbol enumeratorSymbol, IASTEnumerationSpecifier owner, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, IASTExpression initialValue, char[] filename)
{ {
super( enumeratorSymbol ); super( enumeratorSymbol );
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
@ -41,6 +50,7 @@ public class ASTEnumerator extends ASTSymbol implements IASTEnumerator
setEndingOffsetAndLineNumber( endingOffset, endingLine ); setEndingOffsetAndLineNumber( endingOffset, endingLine );
this.initialValue = initialValue; this.initialValue = initialValue;
this.owner = owner; this.owner = owner;
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTEnumerator#getOwnerEnumerationSpecifier() * @see org.eclipse.cdt.core.parser.ast.IASTEnumerator#getOwnerEnumerationSpecifier()

View file

@ -37,10 +37,11 @@ public class ASTField extends ASTVariable implements IASTField
* @param nameOffset * @param nameOffset
* @param references * @param references
* @param visibility * @param visibility
* @param filename
*/ */
public ASTField(ISymbol newSymbol, IASTAbstractDeclaration abstractDeclaration, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references, boolean previouslyDeclared, IASTExpression constructorExpression, ASTAccessVisibility visibility) public ASTField(ISymbol newSymbol, IASTAbstractDeclaration abstractDeclaration, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references, boolean previouslyDeclared, IASTExpression constructorExpression, ASTAccessVisibility visibility, char [] filename)
{ {
super( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, constructorExpression, previouslyDeclared ); super( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, constructorExpression, previouslyDeclared, filename );
this.visibility = visibility; this.visibility = visibility;
} }

View file

@ -44,6 +44,14 @@ public class ASTFunction extends ASTScope implements IASTFunction
private final List parameters; private final List parameters;
protected List references; protected List references;
private List declarations = null; private List declarations = null;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param symbol * @param symbol
* @param parameters * @param parameters
@ -53,8 +61,9 @@ public class ASTFunction extends ASTScope implements IASTFunction
* @param nameOffset * @param nameOffset
* @param ownerTemplate * @param ownerTemplate
* @param references * @param references
* @param filename
*/ */
public ASTFunction(IParameterizedSymbol symbol, int nameEndOffset, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int startingLine, int nameOffset, int nameLine, IASTTemplate ownerTemplate, List references, boolean previouslyDeclared, boolean hasFunctionTryBlock, boolean isFriend ) public ASTFunction(IParameterizedSymbol symbol, int nameEndOffset, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int startingLine, int nameOffset, int nameLine, IASTTemplate ownerTemplate, List references, boolean previouslyDeclared, boolean hasFunctionTryBlock, boolean isFriend, char[] filename )
{ {
super( symbol ); super( symbol );
this.parameters = parameters; this.parameters = parameters;
@ -69,6 +78,7 @@ public class ASTFunction extends ASTScope implements IASTFunction
this.previouslyDeclared =previouslyDeclared; this.previouslyDeclared =previouslyDeclared;
this.hasFunctionTryBlock = hasFunctionTryBlock; this.hasFunctionTryBlock = hasFunctionTryBlock;
this.isFriendDeclaration = isFriend; this.isFriendDeclaration = isFriend;
fn = filename;
} }

View file

@ -29,15 +29,24 @@ public class ASTLinkageSpecification extends ASTAnonymousDeclaration implements
{ {
private List declarations = new ArrayList(); private List declarations = new ArrayList();
private final String linkageString; private final String linkageString;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param filename
* *
*/ */
public ASTLinkageSpecification( IContainerSymbol scope, String linkageString, int startingOffset, int startingLine ) public ASTLinkageSpecification( IContainerSymbol scope, String linkageString, int startingOffset, int startingLine, char[] filename )
{ {
super( scope ); super( scope );
this.linkageString = linkageString; this.linkageString = linkageString;
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification#getLinkageString() * @see org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification#getLinkageString()

View file

@ -53,9 +53,10 @@ public class ASTMethod extends ASTFunction implements IASTMethod
* @param nameOffset * @param nameOffset
* @param ownerTemplate * @param ownerTemplate
* @param references * @param references
* @param filename
*/ */
public ASTMethod(IParameterizedSymbol symbol, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTTemplate ownerTemplate, public ASTMethod(IParameterizedSymbol symbol, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTTemplate ownerTemplate,
List references, boolean previouslyDeclared, boolean isConstructor, boolean isDestructor, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean hasFunctionTryBlock, boolean isFriend ) List references, boolean previouslyDeclared, boolean isConstructor, boolean isDestructor, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean hasFunctionTryBlock, boolean isFriend, char [] filename )
{ {
super( super(
symbol, symbol,
@ -66,7 +67,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod
startOffset, startOffset,
startLine, startLine,
nameOffset, nameOffset,
nameLine, ownerTemplate, references, previouslyDeclared, hasFunctionTryBlock, isFriend ); nameLine, ownerTemplate, references, previouslyDeclared, hasFunctionTryBlock, isFriend, filename );
this.visibility = visibility; this.visibility = visibility;
this.isConstructor = isConstructor; this.isConstructor = isConstructor;
this.isDestructor = isDestructor; this.isDestructor = isDestructor;

View file

@ -28,14 +28,23 @@ public class ASTNamespaceAlias extends ASTSymbol implements IASTNamespaceAlias
private final String alias; private final String alias;
private final IASTNamespaceDefinition namespace; private final IASTNamespaceDefinition namespace;
private List references; private List references;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param scope * @param scope
* @param symbol * @param symbol
* @param startingOffset * @param startingOffset
* @param nameOffset * @param nameOffset
* @param endOffset * @param endOffset
* @param filename
*/ */
public ASTNamespaceAlias(ISymbol s, String alias, IASTNamespaceDefinition namespaceDefinition, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine, List references) public ASTNamespaceAlias(ISymbol s, String alias, IASTNamespaceDefinition namespaceDefinition, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine, List references, char[] filename)
{ {
super( s ); super( s );
this.alias = alias; this.alias = alias;
@ -45,6 +54,7 @@ public class ASTNamespaceAlias extends ASTSymbol implements IASTNamespaceAlias
setNameOffset(nameOffset); setNameOffset(nameOffset);
setNameEndOffsetAndLineNumber(nameEndOffset, nameEndOffset); setNameEndOffsetAndLineNumber(nameEndOffset, nameEndOffset);
this.references = references; this.references = references;
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTNamespaceAlias#getAlias() * @see org.eclipse.cdt.core.parser.ast.IASTNamespaceAlias#getAlias()

View file

@ -31,19 +31,28 @@ public class ASTNamespaceDefinition
{ {
private final ASTQualifiedNamedElement qualifiedName; private final ASTQualifiedNamedElement qualifiedName;
private List declarations = null; private List declarations = null;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param namespaceSymbol * @param namespaceSymbol
* @param startingOffset * @param startingOffset
* @param nameOffset * @param nameOffset
* @param filename
*/ */
public ASTNamespaceDefinition(ISymbol namespaceSymbol, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) public ASTNamespaceDefinition(ISymbol namespaceSymbol, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] filename )
{ {
super( namespaceSymbol ); super( namespaceSymbol );
setStartingOffsetAndLineNumber( startingOffset, startingLine ); setStartingOffsetAndLineNumber( startingOffset, startingLine );
setNameOffset( nameOffset ); setNameOffset( nameOffset );
setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); setNameEndOffsetAndLineNumber( nameEndOffset, nameLine );
qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), namespaceSymbol.getName() ); qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), namespaceSymbol.getName() );
fn= filename;
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -34,6 +34,13 @@ public class ASTParameterDeclaration extends ASTSymbol implements IASTParameterD
private final ASTAbstractDeclaration abstractDeclaration; private final ASTAbstractDeclaration abstractDeclaration;
private final String parameterName; private final String parameterName;
private final IASTInitializerClause initializerClause; private final IASTInitializerClause initializerClause;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param isConst * @param isConst
@ -42,8 +49,9 @@ public class ASTParameterDeclaration extends ASTSymbol implements IASTParameterD
* @param arrayModifiers * @param arrayModifiers
* @param parameterName * @param parameterName
* @param initializerClause * @param initializerClause
* @param filename
*/ */
public ASTParameterDeclaration(ISymbol symbol, boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) public ASTParameterDeclaration(ISymbol symbol, boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] filename )
{ {
super( symbol ); super( symbol );
abstractDeclaration = new ASTAbstractDeclaration( isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp ); abstractDeclaration = new ASTAbstractDeclaration( isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp );
@ -53,6 +61,7 @@ public class ASTParameterDeclaration extends ASTSymbol implements IASTParameterD
setEndingOffsetAndLineNumber(endingOffset, endingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine);
setNameOffset(nameOffset); setNameOffset(nameOffset);
setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); setNameEndOffsetAndLineNumber( nameEndOffset, nameLine );
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration#getName() * @see org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration#getName()

View file

@ -38,14 +38,23 @@ public class ASTTemplateDeclaration extends ASTSymbol implements IASTTemplateDec
private ISymbol owned = null; private ISymbol owned = null;
private IASTScope ownerScope; private IASTScope ownerScope;
private ITemplateFactory factory; private ITemplateFactory factory;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
private ITemplateSymbol getTemplateSymbol(){ private ITemplateSymbol getTemplateSymbol(){
return (ITemplateSymbol) (( getSymbol() instanceof ITemplateSymbol ) ? getSymbol() : null); return (ITemplateSymbol) (( getSymbol() instanceof ITemplateSymbol ) ? getSymbol() : null);
} }
/** /**
* @param filename
* *
*/ */
public ASTTemplateDeclaration( ITemplateSymbol template, IASTScope scope, List parameters ) public ASTTemplateDeclaration( ITemplateSymbol template, IASTScope scope, List parameters, char[] filename )
{ {
super( template ); super( template );
@ -67,6 +76,7 @@ public class ASTTemplateDeclaration extends ASTSymbol implements IASTTemplateDec
templateParameters = ( parameters != null ) ? parameters : new LinkedList(); templateParameters = ( parameters != null ) ? parameters : new LinkedList();
ownerScope = scope; ownerScope = scope;
fn = filename;
} }
public IASTScope getOwnerScope(){ public IASTScope getOwnerScope(){

View file

@ -36,9 +36,16 @@ public class ASTTemplateInstantiation extends ASTSymbol implements IASTTemplateI
private IASTTemplateDeclaration instantiatedTemplate; private IASTTemplateDeclaration instantiatedTemplate;
private ISymbol instance; private ISymbol instance;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
public ASTTemplateInstantiation( IASTScope scope ){ public ASTTemplateInstantiation( IASTScope scope, char[] filename ){
super( null ); super( null );
IContainerSymbol container = ((ASTScope)scope).getContainerSymbol(); IContainerSymbol container = ((ASTScope)scope).getContainerSymbol();
@ -49,6 +56,7 @@ public class ASTTemplateInstantiation extends ASTSymbol implements IASTTemplateI
factory.pushTemplate( null ); factory.pushTemplate( null );
ownerScope = scope; ownerScope = scope;
fn = filename;
} }
public IASTTemplateDeclaration getInstantiatedTemplate(){ public IASTTemplateDeclaration getInstantiatedTemplate(){

View file

@ -39,15 +39,23 @@ public class ASTTemplateParameter extends ASTSymbol implements IASTTemplateParam
private IASTTypeId defaultValue; private IASTTypeId defaultValue;
private ASTParameterDeclaration parameter; private ASTParameterDeclaration parameter;
private List parms; private List parms;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param filename
* @param symbol * @param symbol
* @param defaultValue2 * @param defaultValue2
* @param parameter2 * @param parameter2
* @param parms2 * @param parms2
*/ */
public ASTTemplateParameter(ISymbol sym, IASTTypeId defVal, IASTParameterDeclaration param, List parms, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) { public ASTTemplateParameter(ISymbol sym, IASTTypeId defVal, IASTParameterDeclaration param, List parms, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] filename ) {
super( sym ); super( sym );
symbol = sym; symbol = sym;
defaultValue = defVal; defaultValue = defVal;
@ -58,6 +66,7 @@ public class ASTTemplateParameter extends ASTSymbol implements IASTTemplateParam
setEndingOffsetAndLineNumber(endingOffset, endingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine);
setNameOffset(nameOffset); setNameOffset(nameOffset);
setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); setNameEndOffsetAndLineNumber( nameEndOffset, nameLine );
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTTemplateParameter#getTemplateParameterKind() * @see org.eclipse.cdt.core.parser.ast.IASTTemplateParameter#getTemplateParameterKind()

View file

@ -21,10 +21,11 @@ import org.eclipse.cdt.internal.core.parser.pst.ITemplateSymbol;
public class ASTTemplateSpecialization extends ASTTemplateDeclaration implements IASTTemplateSpecialization public class ASTTemplateSpecialization extends ASTTemplateDeclaration implements IASTTemplateSpecialization
{ {
/** /**
* @param filename
* *
*/ */
public ASTTemplateSpecialization( ITemplateSymbol template, IASTScope scope ) public ASTTemplateSpecialization( ITemplateSymbol template, IASTScope scope, char []filename )
{ {
super(template, scope, null); super(template, scope, null, filename);
} }
} }

View file

@ -32,6 +32,13 @@ public class ASTTypedef extends ASTSymbol implements IASTTypedefDeclaration
private final IASTAbstractDeclaration mapping; private final IASTAbstractDeclaration mapping;
private final ASTQualifiedNamedElement qualifiedName; private final ASTQualifiedNamedElement qualifiedName;
private List references; private List references;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param newSymbol * @param newSymbol
@ -39,8 +46,9 @@ public class ASTTypedef extends ASTSymbol implements IASTTypedefDeclaration
* @param startingOffset * @param startingOffset
* @param nameOffset * @param nameOffset
* @param references * @param references
* @param filename
*/ */
public ASTTypedef(ISymbol newSymbol, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references) public ASTTypedef(ISymbol newSymbol, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references, char[] filename)
{ {
super( newSymbol ); super( newSymbol );
this.mapping = mapping; this.mapping = mapping;
@ -49,6 +57,7 @@ public class ASTTypedef extends ASTSymbol implements IASTTypedefDeclaration
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
setNameOffset(nameOffset); setNameOffset(nameOffset);
setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); setNameEndOffsetAndLineNumber( nameEndOffset, nameLine );
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -31,11 +31,19 @@ public class ASTUsingDeclaration extends ASTNode implements IASTUsingDeclaration
private final List declarations = new ArrayList(); private final List declarations = new ArrayList();
private List references; private List references;
private String name; private String name;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param filename
* *
*/ */
public ASTUsingDeclaration( IASTScope ownerScope, String name, List declarations, boolean isTypeName, int startingOffset, int startingLine, int endingOffset, int endingLine, List references ) public ASTUsingDeclaration( IASTScope ownerScope, String name, List declarations, boolean isTypeName, int startingOffset, int startingLine, int endingOffset, int endingLine, List references, char[] filename )
{ {
this.ownerScope = ownerScope; this.ownerScope = ownerScope;
this.isTypeName = isTypeName; this.isTypeName = isTypeName;
@ -44,6 +52,7 @@ public class ASTUsingDeclaration extends ASTNode implements IASTUsingDeclaration
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
setEndingOffsetAndLineNumber(endingOffset, endingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine);
this.references = references; this.references = references;
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration#isTypename() * @see org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration#isTypename()

View file

@ -27,13 +27,22 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs
{ {
private final IUsingDirectiveSymbol using; private final IUsingDirectiveSymbol using;
private List references; private List references;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param namespaceDefinition * @param namespaceDefinition
* @param startingOffset * @param startingOffset
* @param endingOffset * @param endingOffset
* @param filename
*/ */
//public ASTUsingDirective(IContainerSymbol ownerSymbol, IASTNamespaceDefinition namespaceDefinition, int startingOffset, int endingOffset, List references ) //public ASTUsingDirective(IContainerSymbol ownerSymbol, IASTNamespaceDefinition namespaceDefinition, int startingOffset, int endingOffset, List references )
public ASTUsingDirective(IContainerSymbol ownerSymbol, IUsingDirectiveSymbol usingDirective, int startingOffset, int startingLine, int endingOffset, int endingLine, List references ) public ASTUsingDirective(IContainerSymbol ownerSymbol, IUsingDirectiveSymbol usingDirective, int startingOffset, int startingLine, int endingOffset, int endingLine, List references, char[] filename )
{ {
super( ownerSymbol ); super( ownerSymbol );
//namespace = namespaceDefinition; //namespace = namespaceDefinition;
@ -41,6 +50,7 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
setEndingOffsetAndLineNumber(endingOffset, endingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine);
this.references = references; this.references = references;
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -35,6 +35,14 @@ public class ASTVariable extends ASTSymbol implements IASTVariable
private final IASTInitializerClause initializerClause; private final IASTInitializerClause initializerClause;
private final IASTAbstractDeclaration abstractDeclaration; private final IASTAbstractDeclaration abstractDeclaration;
protected List references; protected List references;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param newSymbol * @param newSymbol
* @param abstractDeclaration * @param abstractDeclaration
@ -43,8 +51,9 @@ public class ASTVariable extends ASTSymbol implements IASTVariable
* @param startingOffset * @param startingOffset
* @param nameOffset * @param nameOffset
* @param references * @param references
* @param filename
*/ */
public ASTVariable(ISymbol newSymbol, IASTAbstractDeclaration abstractDeclaration, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references, IASTExpression constructorExpression, boolean previouslyDeclared ) public ASTVariable(ISymbol newSymbol, IASTAbstractDeclaration abstractDeclaration, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references, IASTExpression constructorExpression, boolean previouslyDeclared, char[] filename )
{ {
super( newSymbol ); super( newSymbol );
this.abstractDeclaration = abstractDeclaration; this.abstractDeclaration = abstractDeclaration;
@ -56,6 +65,7 @@ public class ASTVariable extends ASTSymbol implements IASTVariable
setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine);
this.references = references; this.references = references;
qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), newSymbol.getName() ); qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), newSymbol.getName() );
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTVariable#isAuto() * @see org.eclipse.cdt.core.parser.ast.IASTVariable#isAuto()

View file

@ -20,7 +20,6 @@ import java.util.Map;
import java.util.Stack; import java.util.Stack;
import org.eclipse.cdt.core.parser.Enum; import org.eclipse.cdt.core.parser.Enum;
import org.eclipse.cdt.core.parser.IFilenameProvider;
import org.eclipse.cdt.core.parser.IProblem; import org.eclipse.cdt.core.parser.IProblem;
import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate; import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
import org.eclipse.cdt.core.parser.IToken; import org.eclipse.cdt.core.parser.IToken;
@ -118,13 +117,13 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
protected static final String EMPTY_STRING = ""; //$NON-NLS-1$ protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
private final static ITypeInfo.OperatorExpression SUBSCRIPT; private final static ITypeInfo.OperatorExpression SUBSCRIPT;
private final static IProblemFactory problemFactory = new ASTProblemFactory(); private final static IProblemFactory problemFactory = new ASTProblemFactory();
private final IFilenameProvider fileProvider;
private final ParserMode mode; private final ParserMode mode;
private final ReferenceCache cache = new ReferenceCache(); private final ReferenceCache cache = new ReferenceCache();
private static final int BUILTIN_TYPE_SIZE = 64; private static final int BUILTIN_TYPE_SIZE = 64;
private final Hashtable typeIdCache = new Hashtable( BUILTIN_TYPE_SIZE ); private final Hashtable typeIdCache = new Hashtable( BUILTIN_TYPE_SIZE );
private final Hashtable simpleTypeSpecCache = new Hashtable( BUILTIN_TYPE_SIZE ); private final Hashtable simpleTypeSpecCache = new Hashtable( BUILTIN_TYPE_SIZE );
private static final int DEFAULT_QUALIFIEDNAME_REFERENCE_SIZE = 4; private static final int DEFAULT_QUALIFIEDNAME_REFERENCE_SIZE = 4;
private char[] filename;
static static
{ {
@ -144,12 +143,12 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
} }
} }
public CompleteParseASTFactory( IFilenameProvider filenameProvider, ParserLanguage language, ParserMode mode, IASTFactoryExtension extension ) public CompleteParseASTFactory( ParserLanguage language, ParserMode mode, IASTFactoryExtension extension )
{ {
super(extension); super(extension);
pst = new ParserSymbolTable( language, mode ); pst = new ParserSymbolTable( language, mode );
fileProvider = filenameProvider;
this.mode = mode; this.mode = mode;
filename = EMPTY_STRING.toCharArray();
} }
/* /*
@ -492,6 +491,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
int startingLine, int endingOffset, int endingLine) int startingLine, int endingOffset, int endingLine)
throws ASTSemanticException throws ASTSemanticException
{ {
setFilename( duple );
List references = new ArrayList(); List references = new ArrayList();
ISymbol symbol = lookupQualifiedName( ISymbol symbol = lookupQualifiedName(
scopeToSymbol( scope), duple, references, true ); scopeToSymbol( scope), duple, references, true );
@ -505,13 +505,20 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
handleProblem( pste.createProblemID(), duple.toString(), startingOffset, endingOffset, startingLine, true ); handleProblem( pste.createProblemID(), duple.toString(), startingOffset, endingOffset, startingLine, true );
} }
ASTUsingDirective using = new ASTUsingDirective( scopeToSymbol(scope), usingDirective, startingOffset, startingLine, endingOffset, endingLine, references ); ASTUsingDirective using = new ASTUsingDirective( scopeToSymbol(scope), usingDirective, startingOffset, startingLine, endingOffset, endingLine, references, filename );
attachSymbolExtension( usingDirective, using ); attachSymbolExtension( usingDirective, using );
return using; return using;
} }
/**
* @param duple
*/
private void setFilename(ITokenDuple duple) {
filename = ( duple == null ) ? EMPTY_STRING.toCharArray() : duple.getFilename();
}
protected IContainerSymbol getScopeToSearchUpon( protected IContainerSymbol getScopeToSearchUpon(
IASTScope currentScope, IASTScope currentScope,
IToken firstToken, Iterator iterator ) IToken firstToken, Iterator iterator )
@ -544,6 +551,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
int startingOffset, int startingOffset,
int startingLine, int endingOffset, int endingLine) throws ASTSemanticException int startingLine, int endingOffset, int endingLine) throws ASTSemanticException
{ {
setFilename( name );
List references = new ArrayList(); List references = new ArrayList();
IUsingDeclarationSymbol endResult = null; IUsingDeclarationSymbol endResult = null;
@ -586,7 +594,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
} }
ASTUsingDeclaration using = new ASTUsingDeclaration( scope, name.getLastToken().getImage(), ASTUsingDeclaration using = new ASTUsingDeclaration( scope, name.getLastToken().getImage(),
endResult.getReferencedSymbols(), isTypeName, startingOffset, startingLine, endingOffset, endingLine, references ); endResult.getReferencedSymbols(), isTypeName, startingOffset, startingLine, endingOffset, endingLine, references, filename );
attachSymbolExtension( endResult, using ); attachSymbolExtension( endResult, using );
return using; return using;
@ -598,9 +606,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
IASTScope scope, IASTScope scope,
String assembly, String assembly,
int startingOffset, int startingOffset,
int startingLine, int endingOffset, int endingLine) int startingLine, int endingOffset, int endingLine, char[] fn)
{ {
return new ASTASMDefinition( scopeToSymbol(scope), assembly, startingOffset, startingLine, endingOffset, endingLine); return new ASTASMDefinition( scopeToSymbol(scope), assembly, startingOffset, startingLine, endingOffset, endingLine, fn);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, int, int) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, int, int)
@ -609,9 +617,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
IASTScope scope, IASTScope scope,
String identifier, String identifier,
int startingOffset, int startingOffset,
int startingLine, int nameOffset, int nameEndOffset, int nameLineNumber) throws ASTSemanticException int startingLine, int nameOffset, int nameEndOffset, int nameLineNumber, char[] fn) throws ASTSemanticException
{ {
//TODO - set filename
IContainerSymbol pstScope = scopeToSymbol(scope); IContainerSymbol pstScope = scopeToSymbol(scope);
ISymbol namespaceSymbol = null; ISymbol namespaceSymbol = null;
@ -651,7 +659,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
} }
} }
ASTNamespaceDefinition namespaceDef = new ASTNamespaceDefinition( namespaceSymbol, startingOffset, startingLine, nameOffset, nameEndOffset, nameLineNumber); ASTNamespaceDefinition namespaceDef = new ASTNamespaceDefinition( namespaceSymbol, startingOffset, startingLine, nameOffset, nameEndOffset, nameLineNumber, fn);
attachSymbolExtension( namespaceSymbol, namespaceDef, true ); attachSymbolExtension( namespaceSymbol, namespaceDef, true );
return namespaceDef; return namespaceDef;
} }
@ -714,9 +722,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
public IASTLinkageSpecification createLinkageSpecification( public IASTLinkageSpecification createLinkageSpecification(
IASTScope scope, IASTScope scope,
String spec, String spec,
int startingOffset, int startingLine) int startingOffset, int startingLine, char[] fn)
{ {
return new ASTLinkageSpecification( scopeToSymbol( scope ), spec, startingOffset, startingLine ); return new ASTLinkageSpecification( scopeToSymbol( scope ), spec, startingOffset, startingLine, fn );
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, org.eclipse.cdt.core.parser.ast.ASTClassKind, org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility, org.eclipse.cdt.core.parser.ast.IASTTemplate, int, int) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, org.eclipse.cdt.core.parser.ast.ASTClassKind, org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility, org.eclipse.cdt.core.parser.ast.IASTTemplate, int, int)
@ -728,8 +736,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
ClassNameType type, ClassNameType type,
ASTAccessVisibility access, ASTAccessVisibility access,
int startingOffset, int startingOffset,
int startingLine, int nameOffset, int nameEndOffset, int nameLine) throws ASTSemanticException int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn) throws ASTSemanticException
{ {
setFilename( fn );
IContainerSymbol currentScopeSymbol = scopeToSymbol(scope); IContainerSymbol currentScopeSymbol = scopeToSymbol(scope);
ITypeInfo.eType pstType = classKindToTypeInfo(kind); ITypeInfo.eType pstType = classKindToTypeInfo(kind);
List references = new ArrayList(); List references = new ArrayList();
@ -819,7 +828,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
addTemplateIdReferences( references, name.getTemplateIdArgLists()[i]); addTemplateIdReferences( references, name.getTemplateIdArgLists()[i]);
name.freeReferences( cache ); name.freeReferences( cache );
} }
ASTClassSpecifier classSpecifier = new ASTClassSpecifier( newSymbol, kind, type, access, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references ); ASTClassSpecifier classSpecifier = new ASTClassSpecifier( newSymbol, kind, type, access, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, filename );
attachSymbolExtension(newSymbol, classSpecifier, true ); attachSymbolExtension(newSymbol, classSpecifier, true );
return classSpecifier; return classSpecifier;
@ -852,10 +861,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
protected void handleProblem( IASTScope scope, int id, String attribute ) throws ASTSemanticException protected void handleProblem( IASTScope scope, int id, String attribute ) throws ASTSemanticException
{ {
handleProblem( scope, id, attribute, -1, -1, -1, true ); handleProblem( scope, id, attribute, -1, -1, -1, true);
} }
protected void handleProblem( int id, String attribute, int startOffset, int endOffset, int lineNumber, boolean isError) throws ASTSemanticException { protected void handleProblem( int id, String attribute, int startOffset, int endOffset, int lineNumber, boolean isError ) throws ASTSemanticException {
handleProblem( null, id, attribute, startOffset, endOffset, lineNumber, isError ); handleProblem( null, id, attribute, startOffset, endOffset, lineNumber, isError );
} }
@ -866,11 +875,12 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
* @param endOffset * @param endOffset
* @param lineNumber * @param lineNumber
* @param isError TODO * @param isError TODO
* @param filename
* @throws ASTSemanticException * @throws ASTSemanticException
*/ */
protected void handleProblem( IASTScope scope, int id, String attribute, int startOffset, int endOffset, int lineNumber, boolean isError) throws ASTSemanticException { protected void handleProblem( IASTScope scope, int id, String attribute, int startOffset, int endOffset, int lineNumber, boolean isError ) throws ASTSemanticException {
IProblem p = problemFactory.createProblem( id, IProblem p = problemFactory.createProblem( id,
startOffset, endOffset, lineNumber, fileProvider.getCurrentFilename(), attribute, !isError, isError ); startOffset, endOffset, lineNumber, filename, attribute, !isError, isError );
TraceUtil.outputTrace(logService, "CompleteParseASTFactory - IProblem : ", p, null, null, null ); //$NON-NLS-1$ TraceUtil.outputTrace(logService, "CompleteParseASTFactory - IProblem : ", p, null, null, null ); //$NON-NLS-1$
@ -919,6 +929,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
ASTAccessVisibility visibility, ASTAccessVisibility visibility,
ITokenDuple parentClassName) throws ASTSemanticException ITokenDuple parentClassName) throws ASTSemanticException
{ {
setFilename( parentClassName );
IDerivableContainerSymbol classSymbol = (IDerivableContainerSymbol)scopeToSymbol( astClassSpec); IDerivableContainerSymbol classSymbol = (IDerivableContainerSymbol)scopeToSymbol( astClassSpec);
Iterator iterator = null; Iterator iterator = null;
List references = new ArrayList(); List references = new ArrayList();
@ -1037,8 +1048,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
IASTScope scope, IASTScope scope,
String name, String name,
int startingOffset, int startingOffset,
int startingLine, int nameOffset, int nameEndOffset, int nameLine) throws ASTSemanticException int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn) throws ASTSemanticException
{ {
setFilename(fn);
IContainerSymbol containerSymbol = scopeToSymbol(scope); IContainerSymbol containerSymbol = scopeToSymbol(scope);
ITypeInfo.eType pstType = ITypeInfo.t_enumeration; ITypeInfo.eType pstType = ITypeInfo.t_enumeration;
@ -1052,11 +1064,18 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
handleProblem( e.createProblemID(), name ); handleProblem( e.createProblemID(), name );
} }
ASTEnumerationSpecifier enumSpecifier = new ASTEnumerationSpecifier( classSymbol, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine ); ASTEnumerationSpecifier enumSpecifier = new ASTEnumerationSpecifier( classSymbol, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, fn );
attachSymbolExtension(classSymbol, enumSpecifier, true ); attachSymbolExtension(classSymbol, enumSpecifier, true );
return enumSpecifier; return enumSpecifier;
} }
/**
* @param fn
*/
private void setFilename(char[] fn) {
filename = fn;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#addEnumerator(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier, java.lang.String, int, int, org.eclipse.cdt.core.parser.ast.IASTExpression) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#addEnumerator(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier, java.lang.String, int, int, org.eclipse.cdt.core.parser.ast.IASTExpression)
*/ */
@ -1065,8 +1084,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
String name, String name,
int startingOffset, int startingOffset,
int startingLine, int startingLine,
int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue) throws ASTSemanticException int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue, char[] fn) throws ASTSemanticException
{ {
setFilename(fn);
IContainerSymbol enumerationSymbol = (IContainerSymbol)((ISymbolOwner)enumeration).getSymbol(); IContainerSymbol enumerationSymbol = (IContainerSymbol)((ISymbolOwner)enumeration).getSymbol();
ISymbol enumeratorSymbol = pst.newSymbol( name, ITypeInfo.t_enumerator ); ISymbol enumeratorSymbol = pst.newSymbol( name, ITypeInfo.t_enumerator );
@ -1080,7 +1100,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
handleProblem( IProblem.SEMANTIC_INVALID_OVERLOAD, name, startingOffset, endingOffset, startingLine, true ); handleProblem( IProblem.SEMANTIC_INVALID_OVERLOAD, name, startingOffset, endingOffset, startingLine, true );
// assert false : e1; // assert false : e1;
} }
ASTEnumerator enumerator = new ASTEnumerator( enumeratorSymbol, enumeration, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endLine, initialValue ); ASTEnumerator enumerator = new ASTEnumerator( enumeratorSymbol, enumeration, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endLine, initialValue, fn );
((ASTEnumerationSpecifier)enumeration).addEnumerator( enumerator ); ((ASTEnumerationSpecifier)enumeration).addEnumerator( enumerator );
attachSymbolExtension( enumeratorSymbol, enumerator, true ); attachSymbolExtension( enumeratorSymbol, enumerator, true );
return enumerator; return enumerator;
@ -1097,6 +1117,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
IASTTypeId typeId, IASTTypeId typeId,
ITokenDuple idExpression, String literal, IASTNewExpressionDescriptor newDescriptor) throws ASTSemanticException ITokenDuple idExpression, String literal, IASTNewExpressionDescriptor newDescriptor) throws ASTSemanticException
{ {
setFilename( idExpression );
if( idExpression != null ) if( idExpression != null )
{ {
TraceUtil.outputTrace( TraceUtil.outputTrace(
@ -1917,6 +1938,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
IASTScope scope, IASTScope scope,
ITokenDuple duple, IASTExpression expressionList) ITokenDuple duple, IASTExpression expressionList)
{ {
setFilename( duple );
List references = new ArrayList(); List references = new ArrayList();
IContainerSymbol scopeSymbol = scopeToSymbol(scope); IContainerSymbol scopeSymbol = scopeToSymbol(scope);
@ -1966,6 +1988,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
boolean isImaginary, boolean isImaginary,
boolean isGlobal, Map extensionParms ) throws ASTSemanticException boolean isGlobal, Map extensionParms ) throws ASTSemanticException
{ {
setFilename( typeName );
if( extension.overrideCreateSimpleTypeSpecifierMethod( kind )) if( extension.overrideCreateSimpleTypeSpecifierMethod( kind ))
return extension.createSimpleTypeSpecifier(pst, scope, kind, typeName, isShort, isLong, isSigned, isUnsigned, isTypename, isComplex, isImaginary, isGlobal, extensionParms ); return extension.createSimpleTypeSpecifier(pst, scope, kind, typeName, isShort, isLong, isSigned, isUnsigned, isTypename, isComplex, isImaginary, isGlobal, extensionParms );
String typeNameAsString = typeName.toString(); String typeNameAsString = typeName.toString();
@ -2097,6 +2120,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
boolean isExplicit, boolean isExplicit,
boolean isPureVirtual, List constructorChain, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments ) throws ASTSemanticException boolean isPureVirtual, List constructorChain, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments ) throws ASTSemanticException
{ {
setFilename( name );
List references = new ArrayList(); List references = new ArrayList();
IContainerSymbol ownerScope = scopeToSymbol( scope ); IContainerSymbol ownerScope = scopeToSymbol( scope );
@ -2200,7 +2224,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
symbol = functionDeclaration; symbol = functionDeclaration;
} }
ASTFunction function = new ASTFunction( symbol, nameEndOffset, parameters, returnType, exception, startOffset, startLine, nameOffset, nameLine, ownerTemplate, references, previouslyDeclared, hasFunctionTryBlock, isFriend ); ASTFunction function = new ASTFunction( symbol, nameEndOffset, parameters, returnType, exception, startOffset, startLine, nameOffset, nameLine, ownerTemplate, references, previouslyDeclared, hasFunctionTryBlock, isFriend, filename );
attachSymbolExtension(symbol, function, isFunctionDefinition); attachSymbolExtension(symbol, function, isFunctionDefinition);
return function; return function;
} }
@ -2451,6 +2475,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
boolean isPureVirtual, boolean isPureVirtual,
ASTAccessVisibility visibility, List constructorChain, List references, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments ) throws ASTSemanticException ASTAccessVisibility visibility, List constructorChain, List references, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments ) throws ASTSemanticException
{ {
setFilename( nameDuple );
boolean isConstructor = false; boolean isConstructor = false;
boolean isDestructor = false; boolean isDestructor = false;
@ -2585,7 +2610,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
resolveLeftoverConstructorInitializerMembers( symbol, constructorChain ); resolveLeftoverConstructorInitializerMembers( symbol, constructorChain );
ASTMethod method = new ASTMethod( symbol, parameters, returnType, exception, startOffset, startingLine, nameOffset, nameEndOffset, nameLine, ownerTemplate, references, previouslyDeclared, isConstructor, isDestructor, isPureVirtual, visibility, constructorChain, hasFunctionTryBlock, isFriend ); ASTMethod method = new ASTMethod( symbol, parameters, returnType, exception, startOffset, startingLine, nameOffset, nameEndOffset, nameLine, ownerTemplate, references, previouslyDeclared, isConstructor, isDestructor, isPureVirtual, visibility, constructorChain, hasFunctionTryBlock, isFriend, filename );
if( functionDeclaration != null && isFunctionDefinition ) if( functionDeclaration != null && isFunctionDefinition )
attachSymbolExtension( symbol, (ASTSymbol) functionDeclaration.getASTExtension().getPrimaryDeclaration(), false ); attachSymbolExtension( symbol, (ASTSymbol) functionDeclaration.getASTExtension().getPrimaryDeclaration(), false );
attachSymbolExtension( symbol, method, isFunctionDefinition ); attachSymbolExtension( symbol, method, isFunctionDefinition );
@ -2654,8 +2679,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
boolean isRegister, boolean isRegister,
boolean isStatic, boolean isStatic,
int startingOffset, int startingOffset,
int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression) throws ASTSemanticException int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, char[] fn) throws ASTSemanticException
{ {
setFilename( fn );
List references = new ArrayList(); List references = new ArrayList();
IContainerSymbol ownerScope = scopeToSymbol( scope ); IContainerSymbol ownerScope = scopeToSymbol( scope );
@ -2685,7 +2711,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
ITokenDuple newName = name.getLastSegment(); ITokenDuple newName = name.getLastSegment();
return createField(fieldParentScope, newName,isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, return createField(fieldParentScope, newName,isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern,
isRegister, isStatic, startingOffset, startingLine, newName.getStartOffset(), nameEndOffset, nameLine, constructorExpression, ASTAccessVisibility.PRIVATE, references); isRegister, isStatic, startingOffset, startingLine, newName.getStartOffset(), nameEndOffset, nameLine, constructorExpression, ASTAccessVisibility.PRIVATE, references, fn);
} }
} }
@ -2737,7 +2763,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
handleProblem(e.createProblemID(), name.getFirstToken().getImage() ); handleProblem(e.createProblemID(), name.getFirstToken().getImage() );
} }
ASTVariable variable = new ASTVariable( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, constructorExpression, previouslyDeclared ); ASTVariable variable = new ASTVariable( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, constructorExpression, previouslyDeclared, filename );
if( variable.getInitializerClause() != null ) if( variable.getInitializerClause() != null )
{ {
variable.getInitializerClause().setOwnerVariableDeclaration(variable); variable.getInitializerClause().setOwnerVariableDeclaration(variable);
@ -2896,10 +2922,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
boolean isStatic, boolean isStatic,
int startingOffset, int startingOffset,
int startingLine, int startingLine,
int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility) throws ASTSemanticException int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility, char[] fn) throws ASTSemanticException
{ {
return createField(scope, name,isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, return createField(scope, name,isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern,
isRegister, isStatic, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, constructorExpression, visibility, null); isRegister, isStatic, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, constructorExpression, visibility, null, fn);
} }
public IASTField createField( public IASTField createField(
@ -2918,8 +2944,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
int nameOffset, int nameOffset,
int nameEndOffset, int nameEndOffset,
int nameLine, int nameLine,
IASTExpression constructorExpression, ASTAccessVisibility visibility, List references) throws ASTSemanticException IASTExpression constructorExpression, ASTAccessVisibility visibility, List references, char[] fn) throws ASTSemanticException
{ {
setFilename( fn );
IContainerSymbol ownerScope = scopeToSymbol( scope ); IContainerSymbol ownerScope = scopeToSymbol( scope );
String image = ( name != null ) ? name.toString() : EMPTY_STRING; String image = ( name != null ) ? name.toString() : EMPTY_STRING;
@ -2975,7 +3002,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
handleProblem(e.createProblemID(), image ); handleProblem(e.createProblemID(), image );
} }
ASTField field = new ASTField( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, previouslyDeclared, constructorExpression, visibility ); ASTField field = new ASTField( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, previouslyDeclared, constructorExpression, visibility, filename );
attachSymbolExtension(newSymbol, field, !isStatic ); attachSymbolExtension(newSymbol, field, !isStatic );
return field; return field;
@ -2989,8 +3016,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
IASTScope scope, IASTScope scope,
List templateParameters, List templateParameters,
boolean exported, boolean exported,
int startingOffset, int startingLine) throws ASTSemanticException int startingOffset, int startingLine, char[] fn) throws ASTSemanticException
{ {
setFilename(fn);
ITemplateSymbol template = pst.newTemplateSymbol( ParserSymbolTable.EMPTY_NAME ); ITemplateSymbol template = pst.newTemplateSymbol( ParserSymbolTable.EMPTY_NAME );
// the lookup requires a list of type infos // the lookup requires a list of type infos
@ -3005,7 +3033,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
} }
} }
ASTTemplateDeclaration ast = new ASTTemplateDeclaration( template, scope, templateParameters); ASTTemplateDeclaration ast = new ASTTemplateDeclaration( template, scope, templateParameters, filename);
ast.setStartingOffsetAndLineNumber( startingOffset, startingLine ); ast.setStartingOffsetAndLineNumber( startingOffset, startingLine );
attachSymbolExtension( template, ast, false ); attachSymbolExtension( template, ast, false );
@ -3021,8 +3049,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
IASTParameterDeclaration parameter, IASTParameterDeclaration parameter,
List parms, List parms,
IASTCodeScope parameterScope, IASTCodeScope parameterScope,
int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) throws ASTSemanticException int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn ) throws ASTSemanticException
{ {
//TODO filename
ISymbol symbol = null; ISymbol symbol = null;
TypeInfoProvider provider = pst.getTypeInfoProvider(); TypeInfoProvider provider = pst.getTypeInfoProvider();
@ -3074,7 +3103,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
} catch (ParserSymbolTableException e) { } catch (ParserSymbolTableException e) {
} }
ASTTemplateParameter ast = new ASTTemplateParameter( symbol, defaultValue, parameter, parms, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine ); ASTTemplateParameter ast = new ASTTemplateParameter( symbol, defaultValue, parameter, parms, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine, fn );
attachSymbolExtension( symbol, ast, false ); attachSymbolExtension( symbol, ast, false );
@ -3085,9 +3114,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
*/ */
public IASTTemplateInstantiation createTemplateInstantiation( public IASTTemplateInstantiation createTemplateInstantiation(
IASTScope scope, IASTScope scope,
int startingOffset, int startingLine) int startingOffset, int startingLine, char[] fn)
{ {
ASTTemplateInstantiation inst = new ASTTemplateInstantiation( scope ); ASTTemplateInstantiation inst = new ASTTemplateInstantiation( scope, fn );
inst.setStartingOffsetAndLineNumber( startingOffset, startingLine ); inst.setStartingOffsetAndLineNumber( startingOffset, startingLine );
return inst; return inst;
} }
@ -3096,11 +3125,11 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
*/ */
public IASTTemplateSpecialization createTemplateSpecialization( public IASTTemplateSpecialization createTemplateSpecialization(
IASTScope scope, IASTScope scope,
int startingOffset, int startingLine) int startingOffset, int startingLine, char[] fn)
{ {
ITemplateSymbol template = pst.newTemplateSymbol( ParserSymbolTable.EMPTY_NAME ); ITemplateSymbol template = pst.newTemplateSymbol( ParserSymbolTable.EMPTY_NAME );
ASTTemplateSpecialization ast = new ASTTemplateSpecialization( template, scope ); ASTTemplateSpecialization ast = new ASTTemplateSpecialization( template, scope, fn );
ast.setStartingOffsetAndLineNumber( startingOffset, startingLine ); ast.setStartingOffsetAndLineNumber( startingOffset, startingLine );
attachSymbolExtension( template, ast, false ); attachSymbolExtension( template, ast, false );
@ -3114,8 +3143,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
String name, String name,
IASTAbstractDeclaration mapping, IASTAbstractDeclaration mapping,
int startingOffset, int startingOffset,
int startingLine, int nameOffset, int nameEndOffset, int nameLine) throws ASTSemanticException int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn) throws ASTSemanticException
{ {
setFilename( fn );
IContainerSymbol containerSymbol = scopeToSymbol(scope); IContainerSymbol containerSymbol = scopeToSymbol(scope);
ISymbol typeSymbol = cloneSimpleTypeSymbol( name, mapping, null ); ISymbol typeSymbol = cloneSimpleTypeSymbol( name, mapping, null );
@ -3155,7 +3185,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
{ {
handleProblem(e.createProblemID(), name ); handleProblem(e.createProblemID(), name );
} }
ASTTypedef d = new ASTTypedef( typeSymbol, mapping, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references ); ASTTypedef d = new ASTTypedef( typeSymbol, mapping, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, filename );
attachSymbolExtension(typeSymbol, d, true ); attachSymbolExtension(typeSymbol, d, true );
return d; return d;
} }
@ -3167,14 +3197,15 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
IASTTypeSpecifier typeSpecifier, IASTTypeSpecifier typeSpecifier,
IASTTemplate template, IASTTemplate template,
int startingOffset, int startingOffset,
int startingLine, int endingOffset, int endingLine, boolean isFriend) int startingLine, int endingOffset, int endingLine, boolean isFriend, char[] fn)
{ {
return new ASTAbstractTypeSpecifierDeclaration( scopeToSymbol(scope), typeSpecifier, template, startingOffset, startingLine, endingOffset, endingLine, isFriend); return new ASTAbstractTypeSpecifierDeclaration( scopeToSymbol(scope), typeSpecifier, template, startingOffset, startingLine, endingOffset, endingLine, isFriend, fn );
} }
public IASTElaboratedTypeSpecifier createElaboratedTypeSpecifier(IASTScope scope, ASTClassKind kind, ITokenDuple name, int startingOffset, int startingLine, int endOffset, int endingLine, boolean isForewardDecl, boolean isFriend) throws ASTSemanticException public IASTElaboratedTypeSpecifier createElaboratedTypeSpecifier(IASTScope scope, ASTClassKind kind, ITokenDuple name, int startingOffset, int startingLine, int endOffset, int endingLine, boolean isForewardDecl, boolean isFriend) throws ASTSemanticException
{ {
setFilename( name );
IContainerSymbol currentScopeSymbol = scopeToSymbol(scope); IContainerSymbol currentScopeSymbol = scopeToSymbol(scope);
IContainerSymbol originalScope = currentScopeSymbol; IContainerSymbol originalScope = currentScopeSymbol;
@ -3269,7 +3300,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
.getFirstToken().getOffset(), name.getLastToken() .getFirstToken().getOffset(), name.getLastToken()
.getEndOffset(), name.getLastToken() .getEndOffset(), name.getLastToken()
.getLineNumber(), endOffset, endingLine, .getLineNumber(), endOffset, endingLine,
references, isForewardDecl); references, isForewardDecl, filename);
attachSymbolExtension(checkSymbol, elab, !isForewardDecl); attachSymbolExtension(checkSymbol, elab, !isForewardDecl);
} else if (isFriend) { } else if (isFriend) {
((IDerivableContainerSymbol) originalScope).addFriend(checkSymbol); ((IDerivableContainerSymbol) originalScope).addFriend(checkSymbol);
@ -3290,7 +3321,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
.getFirstToken().getOffset(), name .getFirstToken().getOffset(), name
.getLastToken().getEndOffset(), name .getLastToken().getEndOffset(), name
.getLastToken().getLineNumber(), endOffset, .getLastToken().getLineNumber(), endOffset,
endingLine, references, isForewardDecl); endingLine, references, isForewardDecl, filename);
attachSymbolExtension(checkSymbol, elab, !isForewardDecl); attachSymbolExtension(checkSymbol, elab, !isForewardDecl);
return elab; return elab;
} }
@ -3317,6 +3348,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
*/ */
public IASTNamespaceAlias createNamespaceAlias(IASTScope scope, String identifier, ITokenDuple alias, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine) throws ASTSemanticException public IASTNamespaceAlias createNamespaceAlias(IASTScope scope, String identifier, ITokenDuple alias, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine) throws ASTSemanticException
{ {
setFilename( alias );
IContainerSymbol startingSymbol = scopeToSymbol(scope); IContainerSymbol startingSymbol = scopeToSymbol(scope);
List references = new ArrayList(); List references = new ArrayList();
@ -3339,7 +3371,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
ASTNamespaceAlias astAlias = new ASTNamespaceAlias( ASTNamespaceAlias astAlias = new ASTNamespaceAlias(
newSymbol, alias.toString(), (IASTNamespaceDefinition)namespaceSymbol.getASTExtension().getPrimaryDeclaration(), newSymbol, alias.toString(), (IASTNamespaceDefinition)namespaceSymbol.getASTExtension().getPrimaryDeclaration(),
startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endOffset, endingLine, references ); startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endOffset, endingLine, references, filename );
attachSymbolExtension( newSymbol, astAlias, true ); attachSymbolExtension( newSymbol, astAlias, true );
return astAlias; return astAlias;
} }
@ -3417,9 +3449,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
return false; return false;
} }
public IASTParameterDeclaration createParameterDeclaration(boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine) public IASTParameterDeclaration createParameterDeclaration(boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn)
{ {
return new ASTParameterDeclaration( null, isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp, parameterName, initializerClause, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine ); setFilename(fn);
return new ASTParameterDeclaration( null, isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp, parameterName, initializerClause, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine, filename );
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -100,7 +100,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
int nameLine, int nameLine,
int endingOffset, int endingOffset,
int endingLine, int endingLine,
IMacroDescriptor info) { IMacroDescriptor info, char[] fn) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@ -121,7 +121,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
int nameEndOffset, int nameEndOffset,
int nameLine, int nameLine,
int endingOffset, int endingOffset,
int endingLine) { int endingLine, char[] fn) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@ -176,7 +176,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
int startingOffset, int startingOffset,
int startingLine, int startingLine,
int endingOffset, int endingOffset,
int endingLine) { int endingLine, char[] fn) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@ -194,7 +194,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
int startingLine, int startingLine,
int nameOffset, int nameOffset,
int nameEndOffset, int nameEndOffset,
int nameLineNumber) int nameLineNumber, char[] fn)
throws ASTSemanticException { throws ASTSemanticException {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
@ -243,7 +243,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
IASTScope scope, IASTScope scope,
String spec, String spec,
int startingOffset, int startingOffset,
int startingLine) { int startingLine, char[] fn) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@ -268,7 +268,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
int startingLine, int startingLine,
int nameOffset, int nameOffset,
int nameEndOffset, int nameEndOffset,
int nameLine) int nameLine, char[] fn)
throws ASTSemanticException { throws ASTSemanticException {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
@ -327,7 +327,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
int startingLine, int startingLine,
int nameOffset, int nameOffset,
int nameEndOffset, int nameEndOffset,
int nameLine) int nameLine, char[] fn)
throws ASTSemanticException { throws ASTSemanticException {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
@ -350,7 +350,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
int nameLine, int nameLine,
int endingOffset, int endingOffset,
int endLine, int endLine,
IASTExpression initialValue) IASTExpression initialValue, char[] fn)
throws ASTSemanticException { throws ASTSemanticException {
return null; return null;
@ -612,7 +612,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
int nameOffset, int nameOffset,
int nameEndOffset, int nameEndOffset,
int nameLine, int nameLine,
IASTExpression constructorExpression) IASTExpression constructorExpression, char[] fn)
throws ASTSemanticException { throws ASTSemanticException {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
@ -647,7 +647,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
int nameEndOffset, int nameEndOffset,
int nameLine, int nameLine,
IASTExpression constructorExpression, IASTExpression constructorExpression,
ASTAccessVisibility visibility) ASTAccessVisibility visibility, char[] fn)
throws ASTSemanticException { throws ASTSemanticException {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
@ -695,7 +695,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
int nameEndOffset, int nameEndOffset,
int nameLine, int nameLine,
int endingOffset, int endingOffset,
int endingLine) { int endingLine, char[] fn) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@ -711,7 +711,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
List templateParameters, List templateParameters,
boolean exported, boolean exported,
int startingOffset, int startingOffset,
int startingLine) { int startingLine, char[] fn) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@ -730,12 +730,12 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
IASTTypeId defaultValue, IASTTypeId defaultValue,
IASTParameterDeclaration parameter, IASTParameterDeclaration parameter,
List parms, IASTCodeScope parameterScope, List parms, IASTCodeScope parameterScope,
int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine) { int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
/* /*Os
* (non-Javadoc) * (non-Javadoc)
* *
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateInstantiation(org.eclipse.cdt.core.parser.ast.IASTScope, * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateInstantiation(org.eclipse.cdt.core.parser.ast.IASTScope,
@ -744,7 +744,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
public IASTTemplateInstantiation createTemplateInstantiation( public IASTTemplateInstantiation createTemplateInstantiation(
IASTScope scope, IASTScope scope,
int startingOffset, int startingOffset,
int startingLine) { int startingLine, char[] fn) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@ -758,7 +758,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
public IASTTemplateSpecialization createTemplateSpecialization( public IASTTemplateSpecialization createTemplateSpecialization(
IASTScope scope, IASTScope scope,
int startingOffset, int startingOffset,
int startingLine) { int startingLine, char[] fn) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@ -779,7 +779,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
int startingLine, int startingLine,
int nameOffset, int nameOffset,
int nameEndOffset, int nameEndOffset,
int nameLine) int nameLine, char[] fn)
throws ASTSemanticException { throws ASTSemanticException {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
@ -800,7 +800,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
int startingLine, int startingLine,
int endingOffset, int endingOffset,
int endingLine, int endingLine,
boolean isFriend) { boolean isFriend, char[] fn) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }

View file

@ -24,12 +24,22 @@ public class ASTASMDefinition
implements IASTASMDefinition { implements IASTASMDefinition {
private final String assembly; private final String assembly;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param scope * @param scope
* @param filename
*/ */
public ASTASMDefinition(IASTScope scope, String assembly) { public ASTASMDefinition(IASTScope scope, String assembly, char[] filename) {
super(scope); super(scope);
this.assembly = assembly; this.assembly = assembly;
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -28,11 +28,20 @@ public class ASTAbstractTypeSpecifierDeclaration
private final IASTTemplate ownerTemplate; private final IASTTemplate ownerTemplate;
private final IASTTypeSpecifier typeSpecifier; private final IASTTypeSpecifier typeSpecifier;
private final boolean isFriendDeclaration; private final boolean isFriendDeclaration;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param scope * @param scope
* @param typeSpecifier * @param typeSpecifier
* @param filename
*/ */
public ASTAbstractTypeSpecifierDeclaration(IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate ownerTemplate, int startingOffset, int endingOffset, int startingLine, int endingLine, boolean isFriend) public ASTAbstractTypeSpecifierDeclaration(IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate ownerTemplate, int startingOffset, int endingOffset, int startingLine, int endingLine, boolean isFriend, char[] filename)
{ {
super( ownerTemplate != null ? null : scope ); super( ownerTemplate != null ? null : scope );
this.typeSpecifier = typeSpecifier; this.typeSpecifier = typeSpecifier;
@ -42,6 +51,7 @@ public class ASTAbstractTypeSpecifierDeclaration
ownerTemplate.setOwnedDeclaration( this ); ownerTemplate.setOwnedDeclaration( this );
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
setEndingOffsetAndLineNumber(endingOffset, endingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine);
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -35,7 +35,7 @@ public class ASTClassSpecifier extends ASTScopedTypeSpecifier implements IASTQCl
int startingOffset, int startingOffset,
int startingLine, int startingLine,
int nameOffset, int nameOffset,
int nameEndOffset, int nameLineNumber, ASTAccessVisibility access) int nameEndOffset, int nameLineNumber, ASTAccessVisibility access, char[] filename)
{ {
super( scope, name ); super( scope, name );
classNameType = type; classNameType = type;
@ -45,6 +45,7 @@ public class ASTClassSpecifier extends ASTScopedTypeSpecifier implements IASTQCl
setNameEndOffsetAndLineNumber(nameEndOffset, nameLineNumber); setNameEndOffsetAndLineNumber(nameEndOffset, nameLineNumber);
this.access = access; this.access = access;
this.name = name; this.name = name;
fn = filename;
} }
private final String name; private final String name;
@ -54,6 +55,14 @@ public class ASTClassSpecifier extends ASTScopedTypeSpecifier implements IASTQCl
private ASTAccessVisibility access; private ASTAccessVisibility access;
private final ClassNameType classNameType; private final ClassNameType classNameType;
private final ASTClassKind classKind; private final ASTClassKind classKind;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getClassNameType() * @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getClassNameType()
*/ */

View file

@ -27,13 +27,22 @@ public class ASTElaboratedTypeSpecifier extends ASTNode implements IASTElaborate
private final String typeName; private final String typeName;
private final ASTClassKind classKind; private final ASTClassKind classKind;
private final ASTQualifiedNamedElement qualifiedName; private final ASTQualifiedNamedElement qualifiedName;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param elaboratedClassKind * @param elaboratedClassKind
* @param typeName * @param typeName
* @param startingOffset * @param startingOffset
* @param endOffset * @param endOffset
* @param filename
*/ */
public ASTElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, String typeName, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine) public ASTElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, String typeName, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine, char[] filename)
{ {
classKind = elaboratedClassKind; classKind = elaboratedClassKind;
this.typeName = typeName; this.typeName = typeName;
@ -42,6 +51,7 @@ public class ASTElaboratedTypeSpecifier extends ASTNode implements IASTElaborate
setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); setNameEndOffsetAndLineNumber( nameEndOffset, nameLine );
setEndingOffsetAndLineNumber( endOffset, endingLine ); setEndingOffsetAndLineNumber( endOffset, endingLine );
qualifiedName = new ASTQualifiedNamedElement( scope, typeName ); qualifiedName = new ASTQualifiedNamedElement( scope, typeName );
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getTypeName() * @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getTypeName()

View file

@ -29,18 +29,28 @@ public class ASTEnumerationSpecifier extends ASTScopedTypeSpecifier
implements IASTEnumerationSpecifier, IASTOffsetableNamedElement implements IASTEnumerationSpecifier, IASTOffsetableNamedElement
{ {
private final String name; private final String name;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param name * @param name
* @param startingOffset * @param startingOffset
* @param filename
*/ */
public ASTEnumerationSpecifier(IASTScope scope, String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) public ASTEnumerationSpecifier(IASTScope scope, String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] filename )
{ {
super( scope, name ); super( scope, name );
this.name = name; this.name = name;
setNameOffset( nameOffset ); setNameOffset( nameOffset );
setStartingOffsetAndLineNumber( startingOffset, startingLine); setStartingOffsetAndLineNumber( startingOffset, startingLine);
setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine);
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName()

View file

@ -28,6 +28,13 @@ public class ASTEnumerator extends ASTNode
private final IASTExpression initialValue; private final IASTExpression initialValue;
private final String name; private final String name;
private final IASTEnumerationSpecifier enumeration; private final IASTEnumerationSpecifier enumeration;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
@ -35,8 +42,9 @@ public class ASTEnumerator extends ASTNode
* @param string * @param string
* @param startingOffset * @param startingOffset
* @param endingOffset * @param endingOffset
* @param filename
*/ */
public ASTEnumerator(IASTEnumerationSpecifier enumeration, String string, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue) public ASTEnumerator(IASTEnumerationSpecifier enumeration, String string, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue, char[] filename)
{ {
this.enumeration = enumeration; this.enumeration = enumeration;
name = string; name = string;
@ -45,6 +53,7 @@ public class ASTEnumerator extends ASTNode
setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); setNameEndOffsetAndLineNumber( nameEndOffset, nameLine );
setEndingOffsetAndLineNumber( endingOffset, endLine ); setEndingOffsetAndLineNumber( endingOffset, endLine );
this.initialValue = initialValue; this.initialValue = initialValue;
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName()

View file

@ -39,7 +39,7 @@ public class ASTField extends ASTVariable implements IASTField
* @param isRegister * @param isRegister
* @param isStatic * @param isStatic
*/ */
public ASTField(IASTScope scope, String name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility) public ASTField(IASTScope scope, String name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility, char [] filename)
{ {
super( super(
scope, scope,
@ -51,7 +51,7 @@ public class ASTField extends ASTVariable implements IASTField
isMutable, isMutable,
isExtern, isExtern,
isRegister, isRegister,
isStatic, startingOffset, startLine, nameOffset, nameEndOffset, nameLine, constructorExpression ); isStatic, startingOffset, startLine, nameOffset, nameEndOffset, nameLine, constructorExpression, filename );
this.visibility = visibility; this.visibility = visibility;
} }

View file

@ -33,9 +33,10 @@ public class ASTFunction extends ASTDeclaration implements IASTFunction
{ {
/** /**
* @param scope * @param scope
* @param filename
*/ */
public ASTFunction(IASTScope scope, String name, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, boolean isInline, public ASTFunction(IASTScope scope, String name, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, boolean isInline,
boolean isFriend, boolean isStatic, int startOffset, int startLine, int nameOffset, int nameEndOffset, IASTTemplate ownerTemplate, boolean hasFunctionTryBlock, boolean hasVarArgs, int nameLine ) boolean isFriend, boolean isStatic, int startOffset, int startLine, int nameOffset, int nameEndOffset, IASTTemplate ownerTemplate, boolean hasFunctionTryBlock, boolean hasVarArgs, int nameLine, char[] filename )
{ {
super(ownerTemplate != null ? null : scope ); super(ownerTemplate != null ? null : scope );
this.name = name; this.name = name;
@ -54,6 +55,7 @@ public class ASTFunction extends ASTDeclaration implements IASTFunction
setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine);
this.hasFunctionTryBlock = hasFunctionTryBlock; this.hasFunctionTryBlock = hasFunctionTryBlock;
this.varArgs = hasVarArgs; this.varArgs = hasVarArgs;
fn = filename;
} }
private boolean previouslyDeclared; private boolean previouslyDeclared;
@ -66,6 +68,14 @@ public class ASTFunction extends ASTDeclaration implements IASTFunction
private final List parms; private final List parms;
private final IASTAbstractDeclaration returnType; private final IASTAbstractDeclaration returnType;
private final boolean isInline, isFriend, isStatic; private final boolean isInline, isFriend, isStatic;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#isInline() * @see org.eclipse.cdt.core.parser.ast.IASTFunction#isInline()

View file

@ -29,12 +29,20 @@ public class ASTLinkageSpecification
implements IASTDeclaration, IASTLinkageSpecification, IASTQScope { implements IASTDeclaration, IASTLinkageSpecification, IASTQScope {
private final String linkage; private final String linkage;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
public ASTLinkageSpecification( IASTScope scope, String linkage, int startingOffset, int startingLine ) public ASTLinkageSpecification( IASTScope scope, String linkage, int startingOffset, int startingLine, char[] filename )
{ {
super( scope ); super( scope );
this.linkage = linkage; this.linkage = linkage;
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -52,6 +52,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod
* @param startOffset * @param startOffset
* @param nameOffset * @param nameOffset
* @param ownerTemplate * @param ownerTemplate
* @param filename
*/ */
public ASTMethod( public ASTMethod(
IASTScope scope, IASTScope scope,
@ -73,7 +74,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod
boolean isConstructor, boolean isConstructor,
boolean isDestructor, boolean isDestructor,
boolean isVirtual, boolean isExplicit, boolean isPureVirtual, boolean isVirtual, boolean isExplicit, boolean isPureVirtual,
ASTAccessVisibility visibility, List constructorChainElements, boolean hasFunctionTryBlock, boolean hasVarArgs ) ASTAccessVisibility visibility, List constructorChainElements, boolean hasFunctionTryBlock, boolean hasVarArgs, char []filename )
{ {
super( super(
scope, scope,
@ -87,7 +88,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod
startOffset, startOffset,
startLine, startLine,
nameOffset, nameOffset,
nameEndOffset, ownerTemplate, hasFunctionTryBlock, hasVarArgs, nameLine); nameEndOffset, ownerTemplate, hasFunctionTryBlock, hasVarArgs, nameLine, filename);
this.isVirtual = isVirtual; this.isVirtual = isVirtual;
this.isPureVirtual = isPureVirtual; this.isPureVirtual = isPureVirtual;
this.isConstructor = isConstructor; this.isConstructor = isConstructor;

View file

@ -26,6 +26,14 @@ public class ASTNamespaceAlias extends ASTDeclaration implements IASTNamespaceAl
private final String alias; private final String alias;
private final String identifier; private final String identifier;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param scope * @param scope
* @param identifier * @param identifier
@ -33,8 +41,9 @@ public class ASTNamespaceAlias extends ASTDeclaration implements IASTNamespaceAl
* @param startingOffset * @param startingOffset
* @param nameOffset * @param nameOffset
* @param endOffset * @param endOffset
* @param filename
*/ */
public ASTNamespaceAlias(IASTScope scope, String identifier, String string, int startingOffset, int nameOffset, int nameEndOffset, int endOffset, int startingLine, int nameLine, int endingLine) public ASTNamespaceAlias(IASTScope scope, String identifier, String string, int startingOffset, int nameOffset, int nameEndOffset, int endOffset, int startingLine, int nameLine, int endingLine, char[] filename)
{ {
super( scope ); super( scope );
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
@ -43,6 +52,7 @@ public class ASTNamespaceAlias extends ASTDeclaration implements IASTNamespaceAl
setEndingOffsetAndLineNumber(endOffset, endingLine); setEndingOffsetAndLineNumber(endOffset, endingLine);
this.identifier = identifier; this.identifier = identifier;
this.alias = string; this.alias = string;
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor) * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)

View file

@ -29,8 +29,15 @@ public class ASTNamespaceDefinition extends ASTDeclaration implements IASTNamesp
private final String name; private final String name;
private final ASTQualifiedNamedElement qualifiedNameElement; private final ASTQualifiedNamedElement qualifiedNameElement;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
public ASTNamespaceDefinition( IASTScope scope, String name, int startOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) public ASTNamespaceDefinition( IASTScope scope, String name, int startOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] filename )
{ {
super( scope ); super( scope );
qualifiedNameElement = new ASTQualifiedNamedElement( scope, name ); qualifiedNameElement = new ASTQualifiedNamedElement( scope, name );
@ -38,6 +45,7 @@ public class ASTNamespaceDefinition extends ASTDeclaration implements IASTNamesp
setStartingOffsetAndLineNumber(startOffset, startingLine); setStartingOffsetAndLineNumber(startOffset, startingLine);
setNameOffset(nameOffset); setNameOffset(nameOffset);
setNameEndOffsetAndLineNumber(nameEndOffset, nameEndOffset); setNameEndOffsetAndLineNumber(nameEndOffset, nameEndOffset);
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName()

View file

@ -28,6 +28,14 @@ public class ASTParameterDeclaration extends ASTAbstractDeclaration implements I
{ {
private final String parameterName; private final String parameterName;
private final IASTInitializerClause initializerClause; private final IASTInitializerClause initializerClause;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param isConst * @param isConst
* @param typeSpecifier * @param typeSpecifier
@ -35,8 +43,9 @@ public class ASTParameterDeclaration extends ASTAbstractDeclaration implements I
* @param arrayModifiers * @param arrayModifiers
* @param parameterName * @param parameterName
* @param initializerClause * @param initializerClause
* @param filename
*/ */
public ASTParameterDeclaration(boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) public ASTParameterDeclaration(boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] filename )
{ {
super( isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp ); super( isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp );
this.parameterName = parameterName; this.parameterName = parameterName;
@ -45,6 +54,7 @@ public class ASTParameterDeclaration extends ASTAbstractDeclaration implements I
setEndingOffsetAndLineNumber( endingOffset, endingLine ); setEndingOffsetAndLineNumber( endingOffset, endingLine );
setNameOffset( nameOffset ); setNameOffset( nameOffset );
setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine);
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration#getName() * @see org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration#getName()

View file

@ -31,15 +31,25 @@ public class ASTTemplateDeclaration extends ASTDeclaration implements IASTTempla
private IASTDeclaration ownedDeclaration; private IASTDeclaration ownedDeclaration;
private List templateParameters; private List templateParameters;
private final boolean isExported; private final boolean isExported;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param templateParameters * @param templateParameters
* @param filename
*/ */
public ASTTemplateDeclaration(IASTScope scope, List templateParameters, int startingOffset, int startingLine, boolean isExported) public ASTTemplateDeclaration(IASTScope scope, List templateParameters, int startingOffset, int startingLine, boolean isExported, char[] filename)
{ {
super( scope ); super( scope );
this.templateParameters = templateParameters; this.templateParameters = templateParameters;
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
this.isExported = isExported; this.isExported = isExported;
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -27,15 +27,24 @@ import org.eclipse.cdt.core.parser.ast.IReferenceManager;
public class ASTTemplateInstantiation extends ASTDeclaration implements IASTTemplateInstantiation public class ASTTemplateInstantiation extends ASTDeclaration implements IASTTemplateInstantiation
{ {
private IASTDeclaration declaration; private IASTDeclaration declaration;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param scope * @param scope
* @param filename
*/ */
public ASTTemplateInstantiation(IASTScope scope, int startingOffset, int startingLine) public ASTTemplateInstantiation(IASTScope scope, int startingOffset, int startingLine, char[] filename)
{ {
super( scope ); super( scope );
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -33,13 +33,22 @@ public class ASTTemplateParameter implements IASTTemplateParameter, IASTOffsetab
private final ParamKind kind; private final ParamKind kind;
private final String identifier; private final String identifier;
private final String defaultValue; private final String defaultValue;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param kind * @param kind
* @param identifier * @param identifier
* @param defaultValue * @param defaultValue
* @param parameter * @param parameter
* @param filename
*/ */
public ASTTemplateParameter(ParamKind kind, String identifier, String defaultValue, IASTParameterDeclaration parameter, List templateParms, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) public ASTTemplateParameter(ParamKind kind, String identifier, String defaultValue, IASTParameterDeclaration parameter, List templateParms, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] filename )
{ {
this.kind = kind; this.kind = kind;
this.identifier = identifier; this.identifier = identifier;
@ -50,6 +59,7 @@ public class ASTTemplateParameter implements IASTTemplateParameter, IASTOffsetab
setEndingOffsetAndLineNumber( endingOffset, endingLine ); setEndingOffsetAndLineNumber( endingOffset, endingLine );
setNameOffset( nameOffset ); setNameOffset( nameOffset );
setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine);
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -24,9 +24,9 @@ public class ASTTemplateSpecialization extends ASTTemplateDeclaration implements
/** /**
* @param scope * @param scope
*/ */
public ASTTemplateSpecialization(IASTScope scope, int startingOffset, int startingLine ) public ASTTemplateSpecialization(IASTScope scope, int startingOffset, int startingLine, char [] filename )
{ {
super(scope, null, startingOffset, startingLine, false ); super(scope, null, startingOffset, startingLine, false, filename );
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
} }

View file

@ -29,12 +29,21 @@ public class ASTTypedefDeclaration extends ASTDeclaration implements IASTTypedef
private final String name; private final String name;
private final IASTAbstractDeclaration mapping; private final IASTAbstractDeclaration mapping;
private final ASTQualifiedNamedElement qualifiedName; private final ASTQualifiedNamedElement qualifiedName;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param scope * @param scope
* @param name * @param name
* @param mapping * @param mapping
* @param filename
*/ */
public ASTTypedefDeclaration(IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) public ASTTypedefDeclaration(IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] filename )
{ {
super( scope ); super( scope );
this.name = name; this.name = name;
@ -43,6 +52,7 @@ public class ASTTypedefDeclaration extends ASTDeclaration implements IASTTypedef
setNameOffset(nameOffset); setNameOffset(nameOffset);
setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine);
qualifiedName = new ASTQualifiedNamedElement( scope, name ); qualifiedName = new ASTQualifiedNamedElement( scope, name );
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTTypedef#getName() * @see org.eclipse.cdt.core.parser.ast.IASTTypedef#getName()

View file

@ -28,14 +28,23 @@ public class ASTUsingDeclaration
private final boolean isTypename; private final boolean isTypename;
private final String mappingName; private final String mappingName;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
public ASTUsingDeclaration( IASTScope scope, boolean isTypeName, String mappingName, int startingOffset, int startingLine, int endingOffset, int endingLine )
public ASTUsingDeclaration( IASTScope scope, boolean isTypeName, String mappingName, int startingOffset, int startingLine, int endingOffset, int endingLine, char[] filename )
{ {
super( scope ); super( scope );
isTypename = isTypeName; isTypename = isTypeName;
this.mappingName = mappingName; this.mappingName = mappingName;
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
setEndingOffsetAndLineNumber(endingOffset, endingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine);
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration#isTypename() * @see org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration#isTypename()

View file

@ -25,14 +25,21 @@ public class ASTUsingDirective
extends ASTDeclaration extends ASTDeclaration
implements IASTUsingDirective { implements IASTUsingDirective {
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
public ASTUsingDirective( IASTScope scope, String name, int startingOffset, int startingLine, int endingOffset, int endingLine ) public ASTUsingDirective( IASTScope scope, String name, int startingOffset, int startingLine, int endingOffset, int endingLine, char[] filename )
{ {
super( scope ); super( scope );
this.namespaceName = name; this.namespaceName = name;
setStartingOffsetAndLineNumber(startingOffset, startingLine); setStartingOffsetAndLineNumber(startingOffset, startingLine);
setEndingOffsetAndLineNumber(endingOffset, endingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine);
fn = filename;
} }
private final String namespaceName; private final String namespaceName;

View file

@ -36,11 +36,20 @@ public class ASTVariable extends ASTDeclaration implements IASTVariable
private final boolean isStatic; private final boolean isStatic;
private final String name; private final String name;
private final ASTQualifiedNamedElement qualifiedName; private final ASTQualifiedNamedElement qualifiedName;
private final char [] fn;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename()
*/
public char[] getFilename() {
return fn;
}
/** /**
* @param scope * @param scope
* @param filename
*/ */
public ASTVariable(IASTScope scope, String name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, public ASTVariable(IASTScope scope, String name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression,
IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression ) IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, char[] filename )
{ {
super(scope); super(scope);
this.isAuto = isAuto; this.isAuto = isAuto;
@ -59,6 +68,7 @@ public class ASTVariable extends ASTDeclaration implements IASTVariable
setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); setNameEndOffsetAndLineNumber( nameEndOffset, nameLine );
if( initializerClause != null ) if( initializerClause != null )
initializerClause.setOwnerVariableDeclaration(this); initializerClause.setOwnerVariableDeclaration(this);
fn = filename;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTVariable#isAuto() * @see org.eclipse.cdt.core.parser.ast.IASTVariable#isAuto()

View file

@ -81,14 +81,14 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createUsingDirective(org.eclipse.cdt.internal.core.parser.ast.IASTScope, org.eclipse.cdt.internal.core.parser.TokenDuple) * @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createUsingDirective(org.eclipse.cdt.internal.core.parser.ast.IASTScope, org.eclipse.cdt.internal.core.parser.TokenDuple)
*/ */
public IASTUsingDirective createUsingDirective(IASTScope scope, ITokenDuple duple, int startingOffset, int startingLine, int endingOffset, int endingLine) { public IASTUsingDirective createUsingDirective(IASTScope scope, ITokenDuple duple, int startingOffset, int startingLine, int endingOffset, int endingLine) {
return new ASTUsingDirective( scope, duple.toString(), startingOffset, startingLine, endingOffset, endingLine ); return new ASTUsingDirective( scope, duple.toString(), startingOffset, startingLine, endingOffset, endingLine, duple.getFilename() );
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createASMDefinition(org.eclipse.cdt.internal.core.parser.ast.IASTScope, java.lang.String, int, int) * @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createASMDefinition(org.eclipse.cdt.internal.core.parser.ast.IASTScope, java.lang.String, int, int)
*/ */
public IASTASMDefinition createASMDefinition(IASTScope scope, String assembly, int startingOffset, int startingLine, int endingOffset, int endingLine) { public IASTASMDefinition createASMDefinition(IASTScope scope, String assembly, int startingOffset, int startingLine, int endingOffset, int endingLine, char[] fn) {
IASTASMDefinition definition = new ASTASMDefinition( scope, assembly ); IASTASMDefinition definition = new ASTASMDefinition( scope, assembly, fn );
definition.setStartingOffsetAndLineNumber( startingOffset, startingLine ); definition.setStartingOffsetAndLineNumber( startingOffset, startingLine );
definition.setEndingOffsetAndLineNumber( endingOffset, endingLine ); definition.setEndingOffsetAndLineNumber( endingOffset, endingLine );
return definition; return definition;
@ -97,8 +97,8 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createNamespaceDefinition(int, java.lang.String, int) * @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createNamespaceDefinition(int, java.lang.String, int)
*/ */
public IASTNamespaceDefinition createNamespaceDefinition(IASTScope scope, String identifier, int first, int startingLine, int nameOffset, int nameEndOffset, int nameLineNumber) { public IASTNamespaceDefinition createNamespaceDefinition(IASTScope scope, String identifier, int first, int startingLine, int nameOffset, int nameEndOffset, int nameLineNumber, char[] fn) {
IASTNamespaceDefinition definition = new ASTNamespaceDefinition( scope, identifier, first, startingLine, nameOffset, nameEndOffset, nameLineNumber ); IASTNamespaceDefinition definition = new ASTNamespaceDefinition( scope, identifier, first, startingLine, nameOffset, nameEndOffset, nameLineNumber, fn );
return definition; return definition;
} }
@ -112,22 +112,22 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createLinkageSpecification(java.lang.String) * @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createLinkageSpecification(java.lang.String)
*/ */
public IASTLinkageSpecification createLinkageSpecification(IASTScope scope, String spec, int startingOffset, int startingLine) { public IASTLinkageSpecification createLinkageSpecification(IASTScope scope, String spec, int startingOffset, int startingLine, char[] fn) {
return new ASTLinkageSpecification( scope, spec, startingOffset, startingLine ); return new ASTLinkageSpecification( scope, spec, startingOffset, startingLine, fn );
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.internal.core.parser.TokenDuple) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.internal.core.parser.TokenDuple)
*/ */
public IASTUsingDeclaration createUsingDeclaration(IASTScope scope, boolean isTypeName, ITokenDuple name, int startingOffset, int startingLine, int endingOffset, int endingLine) { public IASTUsingDeclaration createUsingDeclaration(IASTScope scope, boolean isTypeName, ITokenDuple name, int startingOffset, int startingLine, int endingOffset, int endingLine) {
return new ASTUsingDeclaration( scope, isTypeName, name.toString(), startingOffset, startingLine, endingOffset, endingLine ); return new ASTUsingDeclaration( scope, isTypeName, name.toString(), startingOffset, startingLine, endingOffset, endingLine, name.getFilename() );
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, org.eclipse.cdt.core.parser.ast.ClassKind, org.eclipse.cdt.core.parser.ast.ClassNameType, org.eclipse.cdt.core.parser.ast.AccessVisibility, org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, org.eclipse.cdt.core.parser.ast.ClassKind, org.eclipse.cdt.core.parser.ast.ClassNameType, org.eclipse.cdt.core.parser.ast.AccessVisibility, org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration)
*/ */
public IASTClassSpecifier createClassSpecifier(IASTScope scope, ITokenDuple name, ASTClassKind kind, ClassNameType type, ASTAccessVisibility access, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) { public IASTClassSpecifier createClassSpecifier(IASTScope scope, ITokenDuple name, ASTClassKind kind, ClassNameType type, ASTAccessVisibility access, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn ) {
return new ASTClassSpecifier( scope, name == null ? "" : name.toString() , kind, type, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, access ); //$NON-NLS-1$ return new ASTClassSpecifier( scope, name == null ? "" : name.toString() , kind, type, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, access, fn ); //$NON-NLS-1$
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -141,17 +141,17 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createEnumerationSpecifier(java.lang.String, int) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createEnumerationSpecifier(java.lang.String, int)
*/ */
public IASTEnumerationSpecifier createEnumerationSpecifier(IASTScope scope, String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine) public IASTEnumerationSpecifier createEnumerationSpecifier(IASTScope scope, String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn)
{ {
return new ASTEnumerationSpecifier( scope, name, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine ); return new ASTEnumerationSpecifier( scope, name, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, fn );
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#addEnumerator(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier, java.lang.String, int, int) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#addEnumerator(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier, java.lang.String, int, int)
*/ */
public IASTEnumerator addEnumerator(IASTEnumerationSpecifier enumeration, String string, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue) public IASTEnumerator addEnumerator(IASTEnumerationSpecifier enumeration, String string, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue, char[] fn)
{ {
IASTEnumerator enumerator = new ASTEnumerator( enumeration, string, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endLine, initialValue ); IASTEnumerator enumerator = new ASTEnumerator( enumeration, string, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endLine, initialValue, fn );
((ASTEnumerationSpecifier)enumeration).addEnumerator( enumerator ); ((ASTEnumerationSpecifier)enumeration).addEnumerator( enumerator );
return enumerator; return enumerator;
} }
@ -200,7 +200,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
*/ */
public IASTFunction createFunction(IASTScope scope, ITokenDuple name, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, boolean isInline, boolean isFriend, boolean isStatic, int startOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTTemplate ownerTemplate, boolean isConst, boolean isVolatile, boolean isVirtual, boolean isExplicit, boolean isPureVirtual, List constructorChain, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments ) public IASTFunction createFunction(IASTScope scope, ITokenDuple name, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, boolean isInline, boolean isFriend, boolean isStatic, int startOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTTemplate ownerTemplate, boolean isConst, boolean isVolatile, boolean isVirtual, boolean isExplicit, boolean isPureVirtual, List constructorChain, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments )
{ {
ASTFunction function = new ASTFunction(scope, name.toString(), parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, startLine, nameOffset, nameEndOffset, ownerTemplate, hasFunctionTryBlock, hasVariableArguments, nameLine ); ASTFunction function = new ASTFunction(scope, name.toString(), parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, startLine, nameOffset, nameEndOffset, ownerTemplate, hasFunctionTryBlock, hasVariableArguments, nameLine, name.getFilename() );
if( isFriend && scope instanceof IASTQClassSpecifier ){ if( isFriend && scope instanceof IASTQClassSpecifier ){
((IASTQClassSpecifier)scope).addFriendDeclaration( function ); ((IASTQClassSpecifier)scope).addFriendDeclaration( function );
} }
@ -212,7 +212,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
*/ */
public IASTMethod createMethod(IASTScope scope, ITokenDuple name, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, boolean isInline, boolean isFriend, boolean isStatic, int startOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTTemplate ownerTemplate, boolean isConst, boolean isVolatile, boolean isVirtual, boolean isExplicit, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments ) public IASTMethod createMethod(IASTScope scope, ITokenDuple name, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, boolean isInline, boolean isFriend, boolean isStatic, int startOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTTemplate ownerTemplate, boolean isConst, boolean isVolatile, boolean isVirtual, boolean isExplicit, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments )
{ {
ASTMethod method = new ASTMethod(scope, name.toString(), parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, startLine, nameOffset, nameEndOffset, nameLine, ownerTemplate, isConst, isVolatile, false, false, isVirtual, isExplicit, isPureVirtual, visibility, constructorChain, hasFunctionTryBlock, hasVariableArguments); ASTMethod method = new ASTMethod(scope, name.toString(), parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, startLine, nameOffset, nameEndOffset, nameLine, ownerTemplate, isConst, isVolatile, false, false, isVirtual, isExplicit, isPureVirtual, visibility, constructorChain, hasFunctionTryBlock, hasVariableArguments, name.getFilename());
if( isFriend && scope instanceof IASTQClassSpecifier ){ if( isFriend && scope instanceof IASTQClassSpecifier ){
((IASTQClassSpecifier)scope).addFriendDeclaration( method ); ((IASTQClassSpecifier)scope).addFriendDeclaration( method );
} }
@ -222,65 +222,65 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createVariable(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, boolean, org.eclipse.cdt.core.parser.ast.IASTInitializerClause, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, boolean, boolean, boolean, boolean) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createVariable(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, boolean, org.eclipse.cdt.core.parser.ast.IASTInitializerClause, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, boolean, boolean, boolean, boolean)
*/ */
public IASTVariable createVariable(IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression) public IASTVariable createVariable(IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, char[] fn)
{ {
return new ASTVariable(scope, ( name != null ? name.toString() : "" ), isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, isRegister, isStatic, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, constructorExpression); //$NON-NLS-1$ return new ASTVariable(scope, ( name != null ? name.toString() : "" ), isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, isRegister, isStatic, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, constructorExpression, fn); //$NON-NLS-1$
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createField(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, boolean, org.eclipse.cdt.core.parser.ast.IASTInitializerClause, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, boolean, boolean, boolean, boolean, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createField(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, boolean, org.eclipse.cdt.core.parser.ast.IASTInitializerClause, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, boolean, boolean, boolean, boolean, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility)
*/ */
public IASTField createField(IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility) public IASTField createField(IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility, char[] fn)
{ {
return new ASTField(scope, ( name != null ? name.toString() : "" ), isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, isRegister, isStatic, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, constructorExpression, visibility); //$NON-NLS-1$ return new ASTField(scope, ( name != null ? name.toString() : "" ), isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, isRegister, isStatic, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, constructorExpression, visibility, fn); //$NON-NLS-1$
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateDeclaration(java.util.List) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateDeclaration(java.util.List)
*/ */
public IASTTemplateDeclaration createTemplateDeclaration(IASTScope scope, List templateParameters, boolean exported, int startingOffset, int startingLine) public IASTTemplateDeclaration createTemplateDeclaration(IASTScope scope, List templateParameters, boolean exported, int startingOffset, int startingLine, char[] fn)
{ {
return new ASTTemplateDeclaration( scope, templateParameters, startingOffset, startingLine, exported ); return new ASTTemplateDeclaration( scope, templateParameters, startingOffset, startingLine, exported, fn );
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateParameter(org.eclipse.cdt.core.parser.ast.IASTTemplateParameter.ParameterKind, org.eclipse.cdt.core.parser.IToken, java.lang.String, org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateParameter(org.eclipse.cdt.core.parser.ast.IASTTemplateParameter.ParameterKind, org.eclipse.cdt.core.parser.IToken, java.lang.String, org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration)
*/ */
public IASTTemplateParameter createTemplateParameter(IASTTemplateParameter.ParamKind kind, String identifier, IASTTypeId defaultValue, IASTParameterDeclaration parameter, List parms, IASTCodeScope parameterScope, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine) public IASTTemplateParameter createTemplateParameter(IASTTemplateParameter.ParamKind kind, String identifier, IASTTypeId defaultValue, IASTParameterDeclaration parameter, List parms, IASTCodeScope parameterScope, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn)
{ {
return new ASTTemplateParameter( kind, identifier, defaultValue != null ? defaultValue.getTypeOrClassName() : "", parameter, parms, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine ); //$NON-NLS-1$ return new ASTTemplateParameter( kind, identifier, defaultValue != null ? defaultValue.getTypeOrClassName() : "", parameter, parms, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine, fn ); //$NON-NLS-1$
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateInstantiation() * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateInstantiation()
*/ */
public IASTTemplateInstantiation createTemplateInstantiation(IASTScope scope, int startingOffset, int startingLine) public IASTTemplateInstantiation createTemplateInstantiation(IASTScope scope, int startingOffset, int startingLine, char[] fn)
{ {
return new ASTTemplateInstantiation(scope, startingOffset, startingLine); return new ASTTemplateInstantiation(scope, startingOffset, startingLine, fn);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateSpecialization() * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateSpecialization()
*/ */
public IASTTemplateSpecialization createTemplateSpecialization(IASTScope scope, int startingOffset, int startingLine) public IASTTemplateSpecialization createTemplateSpecialization(IASTScope scope, int startingOffset, int startingLine, char[] fn)
{ {
return new ASTTemplateSpecialization(scope, startingOffset, startingLine ); return new ASTTemplateSpecialization(scope, startingOffset, startingLine, fn );
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTypedef(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTypedef(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration)
*/ */
public IASTTypedefDeclaration createTypedef(IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine) public IASTTypedefDeclaration createTypedef(IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn)
{ {
return new ASTTypedefDeclaration( scope, name, mapping, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine); return new ASTTypedefDeclaration( scope, name, mapping, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, fn);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTypeSpecDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier, java.util.List, java.util.List) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTypeSpecDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier, java.util.List, java.util.List)
*/ */
public IASTAbstractTypeSpecifierDeclaration createTypeSpecDeclaration(IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend) public IASTAbstractTypeSpecifierDeclaration createTypeSpecDeclaration(IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend, char[] fn)
{ {
ASTAbstractTypeSpecifierDeclaration abs = new ASTAbstractTypeSpecifierDeclaration( scope, typeSpecifier, template, startingOffset, endingOffset, startingLine, endingLine, isFriend ); ASTAbstractTypeSpecifierDeclaration abs = new ASTAbstractTypeSpecifierDeclaration( scope, typeSpecifier, template, startingOffset, endingOffset, startingLine, endingLine, isFriend, fn );
if( isFriend && scope instanceof IASTQClassSpecifier ){ if( isFriend && scope instanceof IASTQClassSpecifier ){
((IASTQClassSpecifier)scope).addFriendDeclaration( abs ); ((IASTQClassSpecifier)scope).addFriendDeclaration( abs );
} }
@ -289,7 +289,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
public IASTElaboratedTypeSpecifier createElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, ITokenDuple typeName, int startingOffset, int startingLine, int endOffset, int endingLine, boolean isForewardDecl, boolean isFriend) public IASTElaboratedTypeSpecifier createElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, ITokenDuple typeName, int startingOffset, int startingLine, int endOffset, int endingLine, boolean isForewardDecl, boolean isFriend)
{ {
return new ASTElaboratedTypeSpecifier( scope, elaboratedClassKind, typeName.toString(), startingOffset, startingLine, typeName.getFirstToken().getOffset(), typeName.getLastToken().getEndOffset(), typeName.getLastToken().getLineNumber(), endOffset, endingLine ); return new ASTElaboratedTypeSpecifier( scope, elaboratedClassKind, typeName.toString(), startingOffset, startingLine, typeName.getFirstToken().getOffset(), typeName.getLastToken().getEndOffset(), typeName.getLastToken().getLineNumber(), endOffset, endingLine, typeName.getFilename() );
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -297,7 +297,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
*/ */
public IASTNamespaceAlias createNamespaceAlias(IASTScope scope, String identifier, ITokenDuple alias, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine) public IASTNamespaceAlias createNamespaceAlias(IASTScope scope, String identifier, ITokenDuple alias, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine)
{ {
return new ASTNamespaceAlias( scope, identifier, alias.toString(), startingOffset, nameOffset, nameEndOffset, endOffset, startingLine, nameLine, endingLine ); return new ASTNamespaceAlias( scope, identifier, alias.toString(), startingOffset, nameOffset, nameEndOffset, endOffset, startingLine, nameLine, endingLine, alias.getFilename());
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -314,9 +314,9 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
return true; // we have no information to say that it is not return true; // we have no information to say that it is not
} }
public IASTParameterDeclaration createParameterDeclaration(boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine) public IASTParameterDeclaration createParameterDeclaration(boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn)
{ {
return new ASTParameterDeclaration( isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp, parameterName, initializerClause, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine ); return new ASTParameterDeclaration( isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp, parameterName, initializerClause, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine, fn );
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -112,7 +112,7 @@ public class ContextStack {
} }
public void updateInclusionContext(CodeReader code, IASTInclusion inclusion, ISourceElementRequestor requestor) throws ContextException { public void updateInclusionContext(CodeReader code, IASTInclusion inclusion, ISourceElementRequestor requestor) throws ContextException {
addInclusionFilename( code.filename ); addInclusionFilename( new String( code.filename ));
ScannerContextInclusion context = new ScannerContextInclusion( code, inclusion, currentInclusionIndex - 1 ); ScannerContextInclusion context = new ScannerContextInclusion( code, inclusion, currentInclusionIndex - 1 );
if( isCircularInclusion( context.getContextName() ) ) if( isCircularInclusion( context.getContextName() ) )

View file

@ -168,7 +168,7 @@ public final class Scanner implements IScanner, IScannerData {
this.contextStack = new ContextStack( this, log ); this.contextStack = new ContextStack( this, log );
this.workingCopies = workingCopies; this.workingCopies = workingCopies;
this.scannerExtension = extension; this.scannerExtension = extension;
this.astFactory = ParserFactory.createASTFactory( this, parserMode, language ); this.astFactory = ParserFactory.createASTFactory( parserMode, language );
if (reader.isFile()) if (reader.isFile())
fileCache.put(reader.filename, reader); fileCache.put(reader.filename, reader);
@ -631,12 +631,12 @@ public final class Scanner implements IScanner, IScannerData {
inclusion = inclusion =
getASTFactory().createInclusion( getASTFactory().createInclusion(
fileName, fileName,
duple.filename, new String( duple.filename ),
!useIncludePaths, !useIncludePaths,
beginOffset, beginOffset,
startLine, startLine,
nameOffset, nameOffset,
nameOffset + fileName.length(), nameLine, endOffset, endLine); nameOffset + fileName.length(), nameLine, endOffset, endLine, getCurrentFilename());
} }
catch (Exception e) catch (Exception e)
{ {
@ -2786,7 +2786,7 @@ public final class Scanner implements IScanner, IScannerData {
beginningOffset, beginningOffset,
startLine, startLine,
directive.getStartOffset(), directive.getStartOffset(),
directive.getStartOffset() + directive.getFilename().length(), nameLine, directive.getEndOffset(), endLine); directive.getStartOffset() + directive.getFilename().length(), nameLine, directive.getEndOffset(), endLine, getCurrentFilename());
} }
catch (Exception e) catch (Exception e)
{ {
@ -3090,7 +3090,7 @@ public final class Scanner implements IScanner, IScannerData {
try try
{ {
getASTFactory().createMacro( key, beginning, beginningLine, offset, offset + key.length(), nameLine, currentContext.getOffset(), contextStack.getCurrentLineNumber(), descriptor ).acceptElement( requestor, null ); getASTFactory().createMacro( key, beginning, beginningLine, offset, offset + key.length(), nameLine, currentContext.getOffset(), contextStack.getCurrentLineNumber(), descriptor, getCurrentFilename() ).acceptElement( requestor, null );
} }
catch (Exception e) catch (Exception e)
{ {
@ -3554,7 +3554,7 @@ public final class Scanner implements IScanner, IScannerData {
*/ */
public IASTFactory getASTFactory() { public IASTFactory getASTFactory() {
if( astFactory == null ) if( astFactory == null )
astFactory = ParserFactory.createASTFactory( this, parserMode, language ); astFactory = ParserFactory.createASTFactory( parserMode, language );
return astFactory; return astFactory;
} }

View file

@ -37,7 +37,7 @@ public class ScannerContextInclusion implements IScannerContext
public final String getContextName() public final String getContextName()
{ {
return code.filename; return new String( code.filename );
} }
public int getOffset() public int getOffset()

View file

@ -147,4 +147,11 @@ public class MacroExpansionToken implements IToken {
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IToken#getFilename()
*/
public char[] getFilename() {
return null;
}
} }

View file

@ -61,16 +61,15 @@ public class Scanner2 implements IScanner, IScannerData {
public final IASTInclusion inclusion; public final IASTInclusion inclusion;
public final CodeReader reader; public final CodeReader reader;
public final int index;
/** /**
* @param reader * @param reader
* @param inclusion * @param inclusion
*/ */
public InclusionData(CodeReader reader, IASTInclusion inclusion, int index ) { public InclusionData(CodeReader reader, IASTInclusion inclusion ) {
this.reader = reader; this.reader = reader;
this.inclusion = inclusion; this.inclusion = inclusion;
this.index = index;
} }
} }
@ -133,7 +132,6 @@ public class Scanner2 implements IScanner, IScannerData {
fileCache.put(reader.filename, reader); fileCache.put(reader.filename, reader);
pushContext(reader.buffer, reader); pushContext(reader.buffer, reader);
addToFileIndex( reader.filename.toCharArray() );
setupBuiltInMacros(); setupBuiltInMacros();
@ -266,6 +264,8 @@ public class Scanner2 implements IScanner, IScannerData {
private static final String EMPTY_STRING = ""; //$NON-NLS-1$ private static final String EMPTY_STRING = ""; //$NON-NLS-1$
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IScanner#nextToken() * @see org.eclipse.cdt.core.parser.IScanner#nextToken()
*/ */
@ -318,7 +318,7 @@ public class Scanner2 implements IScanner, IScannerData {
int tokenType = IToken.tSTRING; int tokenType = IToken.tSTRING;
if( lastToken.getType() == IToken.tLSTRING || nextToken.getType() == IToken.tLSTRING ) if( lastToken.getType() == IToken.tLSTRING || nextToken.getType() == IToken.tLSTRING )
tokenType = IToken.tLSTRING; tokenType = IToken.tLSTRING;
lastToken = new ImagedToken(tokenType, (lastToken.getImage() + nextToken.getImage()).toCharArray(), nextToken.getEndOffset()); //TODO Fix this lastToken = new ImagedToken(tokenType, (lastToken.getImage() + nextToken.getImage()).toCharArray(), nextToken.getEndOffset(), getCurrentFilename() ); //TODO Fix this
if (oldToken != null) if (oldToken != null)
oldToken.setNext(lastToken); oldToken.setNext(lastToken);
nextToken = fetchToken(); nextToken = fetchToken();
@ -464,20 +464,20 @@ public class Scanner2 implements IScanner, IScannerData {
if (pos + 2 < limit) { if (pos + 2 < limit) {
if (buffer[pos + 2] == '.') { if (buffer[pos + 2] == '.') {
bufferPos[bufferStackPos] += 2; bufferPos[bufferStackPos] += 2;
return new SimpleToken(IToken.tELLIPSIS, bufferPos[bufferStackPos] + 1 ); return new SimpleToken(IToken.tELLIPSIS, bufferPos[bufferStackPos] + 1 , getCurrentFilename() );
} }
} }
case '*': case '*':
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tDOTSTAR, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tDOTSTAR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tDOT, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tDOT, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '#': case '#':
if (pos + 1 < limit && buffer[pos + 1] == '#') { if (pos + 1 < limit && buffer[pos + 1] == '#') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tPOUNDPOUND, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tPOUNDPOUND, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
// Should really check to make sure this is the first // Should really check to make sure this is the first
@ -486,49 +486,49 @@ public class Scanner2 implements IScanner, IScannerData {
continue; continue;
case '{': case '{':
return new SimpleToken(IToken.tLBRACE, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tLBRACE, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '}': case '}':
return new SimpleToken(IToken.tRBRACE, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tRBRACE, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '[': case '[':
return new SimpleToken(IToken.tLBRACKET, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tLBRACKET, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case ']': case ']':
return new SimpleToken(IToken.tRBRACKET, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tRBRACKET, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '(': case '(':
return new SimpleToken(IToken.tLPAREN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tLPAREN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case ')': case ')':
return new SimpleToken(IToken.tRPAREN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tRPAREN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case ';': case ';':
return new SimpleToken(IToken.tSEMI, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tSEMI, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case ':': case ':':
if (pos + 1 < limit) { if (pos + 1 < limit) {
if (buffer[pos + 1] == ':') { if (buffer[pos + 1] == ':') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tCOLONCOLON, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tCOLONCOLON, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tCOLON, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tCOLON, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '?': case '?':
return new SimpleToken(IToken.tQUESTION, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tQUESTION, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '+': case '+':
if (pos + 1 < limit) { if (pos + 1 < limit) {
if (buffer[pos + 1] == '+') { if (buffer[pos + 1] == '+') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tINCR, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tINCR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} else if (buffer[pos + 1] == '=') { } else if (buffer[pos + 1] == '=') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tPLUSASSIGN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tPLUSASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tPLUS, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tPLUS, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '-': case '-':
if (pos + 1 < limit) { if (pos + 1 < limit) {
@ -536,140 +536,140 @@ public class Scanner2 implements IScanner, IScannerData {
if (pos + 2 < limit) { if (pos + 2 < limit) {
if (buffer[pos + 2] == '*') { if (buffer[pos + 2] == '*') {
bufferPos[bufferStackPos] += 2; bufferPos[bufferStackPos] += 2;
return new SimpleToken(IToken.tARROWSTAR, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tARROWSTAR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tARROW, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tARROW, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} else if (buffer[pos + 1] == '-') { } else if (buffer[pos + 1] == '-') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tDECR, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tDECR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} else if (buffer[pos + 1] == '=') { } else if (buffer[pos + 1] == '=') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tMINUSASSIGN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tMINUSASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tMINUS, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tMINUS, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '*': case '*':
if (pos + 1 < limit) { if (pos + 1 < limit) {
if (buffer[pos + 1] == '=') { if (buffer[pos + 1] == '=') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tSTARASSIGN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tSTARASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tSTAR, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tSTAR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '/': case '/':
if (pos + 1 < limit) { if (pos + 1 < limit) {
if (buffer[pos + 1] == '=') { if (buffer[pos + 1] == '=') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tDIVASSIGN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tDIVASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tDIV, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tDIV, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '%': case '%':
if (pos + 1 < limit) { if (pos + 1 < limit) {
if (buffer[pos + 1] == '=') { if (buffer[pos + 1] == '=') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tMODASSIGN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tMODASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tMOD, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tMOD, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '^': case '^':
if (pos + 1 < limit) { if (pos + 1 < limit) {
if (buffer[pos + 1] == '=') { if (buffer[pos + 1] == '=') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tXORASSIGN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tXORASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tXOR, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tXOR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '&': case '&':
if (pos + 1 < limit) { if (pos + 1 < limit) {
if (buffer[pos + 1] == '&') { if (buffer[pos + 1] == '&') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tAND, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tAND, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} else if (buffer[pos + 1] == '=') { } else if (buffer[pos + 1] == '=') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tAMPERASSIGN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tAMPERASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tAMPER, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tAMPER, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '|': case '|':
if (pos + 1 < limit) { if (pos + 1 < limit) {
if (buffer[pos + 1] == '|') { if (buffer[pos + 1] == '|') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tOR, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tOR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} else if (buffer[pos + 1] == '=') { } else if (buffer[pos + 1] == '=') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tBITORASSIGN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tBITORASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tBITOR, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tBITOR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '~': case '~':
return new SimpleToken(IToken.tCOMPL, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tCOMPL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '!': case '!':
if (pos + 1 < limit) { if (pos + 1 < limit) {
if (buffer[pos + 1] == '=') { if (buffer[pos + 1] == '=') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tNOTEQUAL, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tNOTEQUAL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tNOT, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tNOT, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '=': case '=':
if (pos + 1 < limit) { if (pos + 1 < limit) {
if (buffer[pos + 1] == '=') { if (buffer[pos + 1] == '=') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tEQUAL, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tEQUAL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tASSIGN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '<': case '<':
if (pos + 1 < limit) { if (pos + 1 < limit) {
if (buffer[pos + 1] == '=') { if (buffer[pos + 1] == '=') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tLTEQUAL, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tLTEQUAL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} else if (buffer[pos + 1] == '<') { } else if (buffer[pos + 1] == '<') {
if (pos + 2 < limit) { if (pos + 2 < limit) {
if (buffer[pos + 2] == '=') { if (buffer[pos + 2] == '=') {
bufferPos[bufferStackPos] += 2; bufferPos[bufferStackPos] += 2;
return new SimpleToken(IToken.tSHIFTLASSIGN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tSHIFTLASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tSHIFTL, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tSHIFTL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tLT, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tLT, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case '>': case '>':
if (pos + 1 < limit) { if (pos + 1 < limit) {
if (buffer[pos + 1] == '=') { if (buffer[pos + 1] == '=') {
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tGTEQUAL, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tGTEQUAL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} else if (buffer[pos + 1] == '>') { } else if (buffer[pos + 1] == '>') {
if (pos + 2 < limit) { if (pos + 2 < limit) {
if (buffer[pos + 2] == '=') { if (buffer[pos + 2] == '=') {
bufferPos[bufferStackPos] += 2; bufferPos[bufferStackPos] += 2;
return new SimpleToken(IToken.tSHIFTRASSIGN, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tSHIFTRASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
++bufferPos[bufferStackPos]; ++bufferPos[bufferStackPos];
return new SimpleToken(IToken.tSHIFTR, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tSHIFTR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
} }
return new SimpleToken(IToken.tGT, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tGT, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
case ',': case ',':
return new SimpleToken(IToken.tCOMMA, bufferPos[bufferStackPos]+ 1); return new SimpleToken(IToken.tCOMMA, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
default: default:
// skip over anything we don't handle // skip over anything we don't handle
@ -739,8 +739,8 @@ public class Scanner2 implements IScanner, IScannerData {
int tokenType = keywords.get(buffer, start, len); int tokenType = keywords.get(buffer, start, len);
char [] result = removedEscapedNewline( CharArrayUtils.extract( buffer, start, len ) ); char [] result = removedEscapedNewline( CharArrayUtils.extract( buffer, start, len ) );
if (tokenType == keywords.undefined) if (tokenType == keywords.undefined)
return new ImagedToken(IToken.tIDENTIFIER, result, bufferPos[bufferStackPos]+ 1); return new ImagedToken(IToken.tIDENTIFIER, result, bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
return new SimpleToken(tokenType, start + len); return new SimpleToken(tokenType, start + len, getCurrentFilename() );
} }
private IToken scanString() { private IToken scanString() {
@ -774,7 +774,7 @@ public class Scanner2 implements IScanner, IScannerData {
// We should really throw an exception if we didn't get the terminating // We should really throw an exception if we didn't get the terminating
// quote before the end of buffer // quote before the end of buffer
return new ImagedToken(tokenType, CharArrayUtils.extract(buffer, stringStart, stringLen), stringStart + stringLen+ 1); return new ImagedToken(tokenType, CharArrayUtils.extract(buffer, stringStart, stringLen), stringStart + stringLen+ 1, getCurrentFilename() );
} }
private IToken scanCharLiteral(boolean b) { private IToken scanCharLiteral(boolean b) {
@ -791,7 +791,7 @@ public class Scanner2 implements IScanner, IScannerData {
} }
if (start >= limit) { if (start >= limit) {
return new ImagedToken(tokenType, emptyCharArray, start); return new ImagedToken(tokenType, emptyCharArray, start, getCurrentFilename() );
} }
@ -814,7 +814,7 @@ public class Scanner2 implements IScanner, IScannerData {
? CharArrayUtils.extract(buffer, start, length) ? CharArrayUtils.extract(buffer, start, length)
: emptyCharArray; : emptyCharArray;
return new ImagedToken(tokenType, image, start + length+ 1 ); return new ImagedToken(tokenType, image, start + length+ 1 , getCurrentFilename() );
} }
private IToken scanNumber() { private IToken scanNumber() {
@ -992,7 +992,7 @@ public class Scanner2 implements IScanner, IScannerData {
return new ImagedToken(isFloat ? IToken.tFLOATINGPT : IToken.tINTEGER, return new ImagedToken(isFloat ? IToken.tFLOATINGPT : IToken.tINTEGER,
CharArrayUtils.extract(buffer, start, CharArrayUtils.extract(buffer, start,
bufferPos[bufferStackPos] - start + 1), bufferPos[bufferStackPos]+ 1); bufferPos[bufferStackPos] - start + 1), bufferPos[bufferStackPos]+ 1, getCurrentFilename() );
} }
private void handlePPDirective(int pos) throws ScannerException { private void handlePPDirective(int pos) throws ScannerException {
@ -1171,7 +1171,7 @@ public class Scanner2 implements IScanner, IScannerData {
if( parserMode == ParserMode.QUICK_PARSE ) if( parserMode == ParserMode.QUICK_PARSE )
{ {
IASTInclusion inclusion = getASTFactory().createInclusion( new String( filename ), EMPTY_STRING, local, startOffset, startLine, nameOffset, nameEndOffset, nameLine, endOffset, endLine ); IASTInclusion inclusion = getASTFactory().createInclusion( new String( filename ), EMPTY_STRING, local, startOffset, startLine, nameOffset, nameEndOffset, nameLine, endOffset, endLine, getCurrentFilename() );
requestor.enterInclusion( inclusion ); requestor.enterInclusion( inclusion );
requestor.exitInclusion( inclusion ); requestor.exitInclusion( inclusion );
} }
@ -1189,8 +1189,8 @@ public class Scanner2 implements IScanner, IScannerData {
if (reader.filename != null) if (reader.filename != null)
fileCache.put(reader.filename, reader); fileCache.put(reader.filename, reader);
if (dlog != null) dlog.println("#include \"" + finalPath + "\""); //$NON-NLS-1$ //$NON-NLS-2$ if (dlog != null) dlog.println("#include \"" + finalPath + "\""); //$NON-NLS-1$ //$NON-NLS-2$
IASTInclusion inclusion = getASTFactory().createInclusion( new String( filename ), new String( reader.filename ), local, startOffset, startLine, nameOffset, nameEndOffset, nameLine, endOffset, endLine ); IASTInclusion inclusion = getASTFactory().createInclusion( new String( filename ), new String( reader.filename ), local, startOffset, startLine, nameOffset, nameEndOffset, nameLine, endOffset, endLine, getCurrentFilename() );
pushContext(reader.buffer, new InclusionData( reader, inclusion, addToFileIndex( reader.filename.toCharArray() ) )); pushContext(reader.buffer, new InclusionData( reader, inclusion ));
return; return;
} }
} }
@ -1215,8 +1215,8 @@ public class Scanner2 implements IScanner, IScannerData {
if (reader.filename != null) if (reader.filename != null)
fileCache.put(reader.filename, reader); fileCache.put(reader.filename, reader);
if (dlog != null) dlog.println("#include <" + finalPath + ">"); //$NON-NLS-1$ //$NON-NLS-2$ if (dlog != null) dlog.println("#include <" + finalPath + ">"); //$NON-NLS-1$ //$NON-NLS-2$
IASTInclusion inclusion = getASTFactory().createInclusion( new String( filename ), new String( reader.filename ), local, startOffset, startLine, nameOffset, nameEndOffset, nameLine, endOffset, endLine ); IASTInclusion inclusion = getASTFactory().createInclusion( new String( filename ), new String( reader.filename ), local, startOffset, startLine, nameOffset, nameEndOffset, nameLine, endOffset, endLine, getCurrentFilename() );
pushContext(reader.buffer, new InclusionData( reader, inclusion, addToFileIndex( reader.filename.toCharArray() ) )); pushContext(reader.buffer, new InclusionData( reader, inclusion ));
return; return;
} }
} }
@ -1337,7 +1337,7 @@ public class Scanner2 implements IScanner, IScannerData {
? new ObjectStyleMacro(name, text) ? new ObjectStyleMacro(name, text)
: new FunctionStyleMacro(name, text, arglist) ); : new FunctionStyleMacro(name, text, arglist) );
requestor.acceptMacro( getASTFactory().createMacro( new String( name ), startingOffset, startingLine, idstart, idstart + idlen, nameLine, textstart + textlen, endingLine, null )); //TODO - IMacroDescriptor? requestor.acceptMacro( getASTFactory().createMacro( new String( name ), startingOffset, startingLine, idstart, idstart + idlen, nameLine, textstart + textlen, endingLine, null, getCurrentFilename() )); //TODO - IMacroDescriptor?
} }
@ -2388,7 +2388,7 @@ public class Scanner2 implements IScanner, IScannerData {
*/ */
public final IASTFactory getASTFactory() { public final IASTFactory getASTFactory() {
if( astFactory == null ) if( astFactory == null )
astFactory = ParserFactory.createASTFactory( this, parserMode, language ); astFactory = ParserFactory.createASTFactory( parserMode, language );
return astFactory; return astFactory;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -2515,52 +2515,17 @@ public class Scanner2 implements IScanner, IScannerData {
} }
protected static final int STARTING_FILECACHE_SIZE = 32;
protected char [][] fileNames = new char[STARTING_FILECACHE_SIZE][];
protected int fileIndexCounter = 0;
/**
* @param cs
* @return
*/
private int addToFileIndex(char[] cs) {
if( fileIndexCounter >= fileNames.length )
{
char [][] prev = fileNames;
fileNames = new char[ prev.length * 2 ][];
System.arraycopy( prev, 0, fileNames, 0, prev.length );
}
int result = fileIndexCounter;
fileNames[ fileIndexCounter ] = cs;
++fileIndexCounter;
return result;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IFilenameProvider#getCurrentFileIndex()
*/
public final int getCurrentFileIndex() {
for( int i = bufferStackPos; i >= 0; --i )
{
if( bufferData[i] instanceof InclusionData )
return ((InclusionData)bufferData[i]).index;
}
return 0;
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IFilenameProvider#getCurrentFilename() * @see org.eclipse.cdt.core.parser.IFilenameProvider#getCurrentFilename()
*/ */
public final char[] getCurrentFilename() { public final char[] getCurrentFilename() {
return fileNames[ getCurrentFileIndex() ]; for( int i = bufferStackPos; i >= 0; --i )
{
if( bufferData[i] instanceof InclusionData )
return ((InclusionData)bufferData[i]).reader.filename;
} }
/* (non-Javadoc) return emptyCharArray;
* @see org.eclipse.cdt.core.parser.IFilenameProvider#getFilenameForIndex(int)
*/
public String getFilenameForIndex(int index) {
if( index >= 0 && index < fileIndexCounter )
return new String( fileNames[index] );
return EMPTY_STRING;
} }
private static CharArrayIntMap keywords; private static CharArrayIntMap keywords;

View file

@ -24,15 +24,19 @@ import org.eclipse.cdt.core.parser.ast.IReferenceManager;
*/ */
public abstract class AbstractToken implements IToken, ITokenDuple { public abstract class AbstractToken implements IToken, ITokenDuple {
public AbstractToken( int type, int lineNumber ) private final char[] filename;
public AbstractToken( int type, int lineNumber, char [] filename )
{ {
setType( type ); setType( type );
this.lineNumber = lineNumber; this.lineNumber = lineNumber;
this.filename = filename;
} }
public AbstractToken( int type ) public AbstractToken( int type, char [] filename )
{ {
setType( type ); setType( type );
this.filename = filename;
} }
public String toString() { public String toString() {
@ -53,6 +57,13 @@ public abstract class AbstractToken implements IToken, ITokenDuple {
return lineNumber; return lineNumber;
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.IToken#getFilename()
*/
public char[] getFilename() {
return filename;
}
public int getEndOffset() { return getOffset() + getLength(); } public int getEndOffset() { return getOffset() + getLength(); }
protected int type; protected int type;

View file

@ -501,5 +501,12 @@ public class BasicTokenDuple implements ITokenDuple {
return toString().toCharArray(); //TODO fix me! return toString().toCharArray(); //TODO fix me!
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ITokenDuple#getFilename()
*/
public char[] getFilename() {
return firstToken.getFilename();
}
} }

View file

@ -25,8 +25,8 @@ public class ImagedExpansionToken extends ImagedToken implements IToken {
* @param contextStack * @param contextStack
* @param i * @param i
*/ */
public ImagedExpansionToken(int t, ContextStack contextStack, char[] i) { public ImagedExpansionToken(int t, ContextStack contextStack, char[] i, char [] f) {
super(t, contextStack, i); super(t, contextStack, i, f);
} }
/** /**
@ -34,8 +34,8 @@ public class ImagedExpansionToken extends ImagedToken implements IToken {
* @param contextStack * @param contextStack
* @param i * @param i
*/ */
public ImagedExpansionToken(int t, char[] i, int macroOffset, int macroLength ) { public ImagedExpansionToken(int t, char[] i, int macroOffset, int macroLength, char [] f) {
super(t, i, macroOffset ); super(t, i, macroOffset, f );
setOffsetAndLength( macroOffset, macroLength ); setOffsetAndLength( macroOffset, macroLength );
} }

View file

@ -25,14 +25,14 @@ public class ImagedToken extends SimpleToken {
* @param contextStack * @param contextStack
* @param i * @param i
*/ */
public ImagedToken(int t, ContextStack contextStack, char[] i) { public ImagedToken(int t, ContextStack contextStack, char[] i, char [] f) {
super(t, contextStack); super(t, contextStack, f );
setImage( i ); setImage( i );
setOffsetAndLength(contextStack.getCurrentContext()); setOffsetAndLength(contextStack.getCurrentContext());
} }
public ImagedToken( int t, char[] i, int endOffset) { public ImagedToken( int t, char[] i, int endOffset, char [] f ) {
super( t, 0 ); super( t, 0, f );
setImage(i); setImage(i);
setOffsetAndLength( endOffset ); setOffsetAndLength( endOffset );
} }

View file

@ -24,8 +24,8 @@ public class SimpleExpansionToken extends SimpleToken implements IToken {
* @param tokenType * @param tokenType
* @param stack * @param stack
*/ */
public SimpleExpansionToken(int tokenType, ContextStack stack) { public SimpleExpansionToken(int tokenType, ContextStack stack, char [] f) {
super( tokenType, stack ); super( tokenType, stack, f );
} }
protected int length; protected int length;

View file

@ -18,14 +18,14 @@ import org.eclipse.cdt.internal.core.parser.scanner.IScannerContext;
public class SimpleToken extends AbstractToken implements IToken { public class SimpleToken extends AbstractToken implements IToken {
public SimpleToken(int t, ContextStack contextStack ) { public SimpleToken(int t, ContextStack contextStack, char [] filename ) {
super(t,contextStack.getCurrentLineNumber()); super(t,contextStack.getCurrentLineNumber(), filename );
setOffsetAndLength(contextStack.getCurrentContext()); setOffsetAndLength(contextStack.getCurrentContext());
} }
public SimpleToken( int t, int endOffset ) public SimpleToken( int t, int endOffset, char [] filename )
{ {
super( t ); super( t, filename );
setOffsetAndLength( endOffset ); setOffsetAndLength( endOffset );
} }

View file

@ -24,12 +24,21 @@ import org.eclipse.cdt.internal.core.parser.scanner.IScannerData;
*/ */
public class TokenFactory { public class TokenFactory {
protected static final char[] EMPTY_CHAR_ARRAY = "".toCharArray(); //$NON-NLS-1$
public static IToken createToken( int tokenType, IScannerData scannerData ) public static IToken createToken( int tokenType, IScannerData scannerData )
{ {
if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION ) if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION )
return new SimpleExpansionToken( tokenType, scannerData.getContextStack() ); return new SimpleExpansionToken( tokenType, scannerData.getContextStack(), getCurrentFilename(scannerData) );
return new SimpleToken( tokenType, scannerData.getContextStack() ); return new SimpleToken( tokenType, scannerData.getContextStack(), getCurrentFilename(scannerData) );
}
/**
* @param scannerData
* @return
*/
private static char[] getCurrentFilename(IScannerData scannerData) {
return scannerData.getContextStack().getInclusionFilename(scannerData.getContextStack().getMostRelevantFileContextIndex() ).toCharArray();
} }
/** /**
@ -40,14 +49,14 @@ public class TokenFactory {
*/ */
public static IToken createUniquelyImagedToken(int type, String image, IScannerData scannerData) { public static IToken createUniquelyImagedToken(int type, String image, IScannerData scannerData) {
if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION ) if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION )
return new ImagedExpansionToken( type, scannerData.getContextStack(), image.toCharArray() ); return new ImagedExpansionToken( type, scannerData.getContextStack(), image.toCharArray(), getCurrentFilename(scannerData) );
return new ImagedToken(type, scannerData.getContextStack(), image.toCharArray() ); return new ImagedToken(type, scannerData.getContextStack(), image.toCharArray(), getCurrentFilename(scannerData));
} }
public static IToken createStandAloneToken( int type, String image ) public static IToken createStandAloneToken( int type, String image )
{ {
return new ImagedToken( type, image.toCharArray(), 0); return new ImagedToken( type, image.toCharArray(), 0, EMPTY_CHAR_ARRAY);
} }
public static ITokenDuple createTokenDuple( IToken first, IToken last ) public static ITokenDuple createTokenDuple( IToken first, IToken last )