mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-10 01:35:39 +02:00
Reduced the number of TokenDuple's instantiated during a parse. <BR>
Removed symbol table warnings.
This commit is contained in:
parent
f64e265d26
commit
22c73dc031
20 changed files with 500 additions and 376 deletions
|
@ -29,7 +29,6 @@ import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind;
|
||||
import org.eclipse.cdt.core.parser.extension.IParserExtension;
|
||||
import org.eclipse.cdt.internal.core.parser.token.KeywordSets;
|
||||
import org.eclipse.cdt.internal.core.parser.token.TokenDuple;
|
||||
import org.eclipse.cdt.internal.core.parser.token.TokenFactory;
|
||||
import org.eclipse.cdt.internal.core.parser.token.KeywordSets.Key;
|
||||
|
||||
|
@ -155,7 +154,7 @@ public class ContextualParser extends CompleteParser {
|
|||
setCompletionScope( scope );
|
||||
setCompletionKind( kind );
|
||||
setCompletionKeywords(key);
|
||||
ITokenDuple duple = new TokenDuple( first, last );
|
||||
ITokenDuple duple = TokenFactory.createTokenDuple( first, last );
|
||||
try {
|
||||
setCompletionContext( astFactory.lookupSymbolInContext( scope, duple, null ) );
|
||||
} catch (ASTNotImplementedException e) {
|
||||
|
|
|
@ -35,7 +35,7 @@ import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type;
|
||||
import org.eclipse.cdt.internal.core.parser.token.TokenDuple;
|
||||
import org.eclipse.cdt.internal.core.parser.token.TokenFactory;
|
||||
/**
|
||||
* @author jcamelon
|
||||
*
|
||||
|
@ -435,7 +435,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
|
|||
convertedParms,
|
||||
(ASTPointerOperator)i.next());
|
||||
|
||||
ITokenDuple nameDuple = ( d.getPointerOperatorNameDuple() != null ) ? new TokenDuple( d.getPointerOperatorNameDuple(), d.getNameDuple() ) : d.getNameDuple();
|
||||
ITokenDuple nameDuple = ( d.getPointerOperatorNameDuple() != null ) ? TokenFactory.createTokenDuple( d.getPointerOperatorNameDuple(), d.getNameDuple() ) : d.getNameDuple();
|
||||
|
||||
if( typedef )
|
||||
return astFactory.createTypedef(scope, nameDuple.toString(), abs,
|
||||
|
|
|
@ -42,6 +42,7 @@ import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind;
|
|||
import org.eclipse.cdt.core.parser.extension.IParserExtension;
|
||||
import org.eclipse.cdt.internal.core.parser.token.KeywordSets;
|
||||
import org.eclipse.cdt.internal.core.parser.token.TokenDuple;
|
||||
import org.eclipse.cdt.internal.core.parser.token.TokenFactory;
|
||||
import org.eclipse.cdt.internal.core.parser.token.KeywordSets.Key;
|
||||
import org.eclipse.cdt.internal.core.parser.util.TraceUtil;
|
||||
|
||||
|
@ -458,7 +459,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
|
|||
}
|
||||
}
|
||||
|
||||
ITokenDuple tokenDuple = new TokenDuple(first, last, ( hasTemplateId ? argumentList.getTemplateArgumentsList() : null ) );
|
||||
ITokenDuple tokenDuple = TokenFactory.createTokenDuple(first, last, ( hasTemplateId ? argumentList.getTemplateArgumentsList() : null ) );
|
||||
setGreaterNameContext( tokenDuple );
|
||||
return tokenDuple;
|
||||
}
|
||||
|
@ -672,7 +673,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
|
|||
}
|
||||
|
||||
ITokenDuple duple =
|
||||
new TokenDuple( originalToken == null ? operatorToken : originalToken, toSend, (hasTemplateId ? templateArgs.getTemplateArgumentsList() : null ) );
|
||||
TokenFactory.createTokenDuple( originalToken == null ? operatorToken : originalToken, toSend, (hasTemplateId ? templateArgs.getTemplateArgumentsList() : null ) );
|
||||
|
||||
d.setName(duple);
|
||||
}
|
||||
|
@ -2127,7 +2128,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
|
|||
ITokenDuple templateId = null;
|
||||
try
|
||||
{
|
||||
templateId = new TokenDuple( current, templateId(scope, CompletionKind.SINGLE_NAME_REFERENCE ) );
|
||||
templateId = TokenFactory.createTokenDuple( current, templateId(scope, CompletionKind.SINGLE_NAME_REFERENCE ) );
|
||||
}
|
||||
catch( BacktrackException bt )
|
||||
{
|
||||
|
|
|
@ -60,7 +60,7 @@ import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind;
|
||||
import org.eclipse.cdt.core.parser.extension.IParserExtension;
|
||||
import org.eclipse.cdt.internal.core.parser.token.KeywordSets;
|
||||
import org.eclipse.cdt.internal.core.parser.token.TokenDuple;
|
||||
import org.eclipse.cdt.internal.core.parser.token.TokenFactory;
|
||||
import org.eclipse.cdt.internal.core.parser.token.KeywordSets.Key;
|
||||
import org.eclipse.cdt.internal.core.parser.util.TraceUtil;
|
||||
|
||||
|
@ -1629,7 +1629,7 @@ public abstract class Parser extends ExpressionParser implements IParser
|
|||
}
|
||||
if( sdw.getName() != null )
|
||||
first = sdw.getName().getFirstToken();
|
||||
ITokenDuple duple = new TokenDuple(first, last);
|
||||
ITokenDuple duple = TokenFactory.createTokenDuple(first, last);
|
||||
sdw.setTypeName(duple);
|
||||
flags.setEncounteredTypename(true);
|
||||
break;
|
||||
|
@ -1725,7 +1725,7 @@ public abstract class Parser extends ExpressionParser implements IParser
|
|||
private void setTypeName(DeclarationWrapper sdw, IToken typeNameBegin, IToken typeNameEnd) {
|
||||
if (typeNameBegin != null)
|
||||
sdw.setTypeName(
|
||||
new TokenDuple(typeNameBegin, typeNameEnd));
|
||||
TokenFactory.createTokenDuple(typeNameBegin, typeNameEnd));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ import org.eclipse.cdt.core.parser.ast.IASTScope;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
||||
import org.eclipse.cdt.core.parser.extension.IParserExtension;
|
||||
import org.eclipse.cdt.internal.core.parser.token.OffsetDuple;
|
||||
import org.eclipse.cdt.internal.core.parser.token.TokenDuple;
|
||||
import org.eclipse.cdt.internal.core.parser.token.TokenFactory;
|
||||
import org.eclipse.cdt.internal.core.parser.util.TraceUtil;
|
||||
|
||||
/**
|
||||
|
@ -133,7 +133,7 @@ public class SelectionParser extends ContextualParser {
|
|||
if( getCompletionKind() == IASTCompletionNode.CompletionKind.UNREACHABLE_CODE )
|
||||
throw new ParseError( ParseError.ParseErrorKind.OFFSETDUPLE_UNREACHABLE );
|
||||
|
||||
ITokenDuple duple = new TokenDuple( firstTokenOfDuple, lastTokenOfDuple );
|
||||
ITokenDuple duple = TokenFactory.createTokenDuple( firstTokenOfDuple, lastTokenOfDuple );
|
||||
|
||||
if( ! duple.syntaxOfName() )
|
||||
throw new ParseError( ParseError.ParseErrorKind.OFFSET_RANGE_NOT_NAME );
|
||||
|
|
|
@ -721,7 +721,6 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
|
|||
|
||||
if( found instanceof IParameterizedSymbol )
|
||||
return (IParameterizedSymbol) found;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -828,12 +827,11 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
|
|||
if( paramList != null ){
|
||||
ParserSymbolTable.resolveFunction( data, constructors );
|
||||
return constructors;
|
||||
} else {
|
||||
}
|
||||
return constructors;
|
||||
}
|
||||
} else
|
||||
return null;
|
||||
} else {
|
||||
}
|
||||
//remove any ambiguous symbols
|
||||
if( data.ambiguities != null && !data.ambiguities.isEmpty() ){
|
||||
Iterator iter = data.ambiguities.iterator();
|
||||
|
@ -875,7 +873,7 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
|
|||
list.addAll( constructors );
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean isVisible( ISymbol symbol, IContainerSymbol qualifyingSymbol ){
|
||||
|
@ -918,9 +916,8 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol {
|
|||
} catch (ParserSymbolTableException e) {
|
||||
return false;
|
||||
}
|
||||
} else { //PRIVATE
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -75,7 +75,6 @@ public class DeferredTemplateInstance extends BasicSymbol implements IDeferredTe
|
|||
ISymbol symbol = _template.getTemplatedSymbol();
|
||||
if( symbol != null )
|
||||
return symbol.isType( type, upperType );
|
||||
else
|
||||
return super.isType( type, upperType );
|
||||
|
||||
}
|
||||
|
@ -84,7 +83,6 @@ public class DeferredTemplateInstance extends BasicSymbol implements IDeferredTe
|
|||
ISymbol symbol = _template.getTemplatedSymbol();
|
||||
if( symbol != null )
|
||||
return symbol.getType();
|
||||
else
|
||||
return super.getType();
|
||||
}
|
||||
|
||||
|
@ -92,7 +90,6 @@ public class DeferredTemplateInstance extends BasicSymbol implements IDeferredTe
|
|||
ISymbol symbol = _template.getTemplatedSymbol();
|
||||
if( symbol != null )
|
||||
return symbol.getTypeInfo();
|
||||
else
|
||||
return super.getTypeInfo();
|
||||
}
|
||||
|
||||
|
|
|
@ -58,7 +58,6 @@ public class ExtensibleSymbolExtension implements ISymbolASTExtension {
|
|||
public ISymbol getSymbol() {
|
||||
if( extensibleSymbol instanceof ISymbol )
|
||||
return (ISymbol) extensibleSymbol;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -451,9 +451,8 @@ public class ParserSymbolTable {
|
|||
private static boolean nameMatches( LookupData data, String name ){
|
||||
if( data.mode == LookupMode.PREFIX ){
|
||||
return name.regionMatches( true, 0, data.name, 0, data.name.length() );
|
||||
} else {
|
||||
return name.equals( data.name );
|
||||
}
|
||||
return name.equals( data.name );
|
||||
}
|
||||
private static boolean checkType( LookupData data, ISymbol symbol ) { //, TypeInfo.eType type, TypeInfo.eType upperType ){
|
||||
if( data.filter == null ){
|
||||
|
@ -804,19 +803,17 @@ public class ParserSymbolTable {
|
|||
|
||||
if( origType == TypeInfo.t_template ){
|
||||
ITemplateSymbol template = (ITemplateSymbol) origSymbol;
|
||||
origSymbol = (ISymbol) template.getTemplatedSymbol();
|
||||
origSymbol = template.getTemplatedSymbol();
|
||||
if( origSymbol == null )
|
||||
return true;
|
||||
else
|
||||
origType = origSymbol.getType();
|
||||
}
|
||||
|
||||
if( newType == TypeInfo.t_template ){
|
||||
ITemplateSymbol template = (ITemplateSymbol) newSymbol;
|
||||
newSymbol = (ISymbol) template.getTemplatedSymbol();
|
||||
newSymbol = template.getTemplatedSymbol();
|
||||
if( newSymbol == null )
|
||||
return true;
|
||||
else
|
||||
newType = newSymbol.getType();
|
||||
}
|
||||
|
||||
|
@ -841,7 +838,6 @@ public class ParserSymbolTable {
|
|||
//allowable thing is if they are both functions.
|
||||
if( origSymbol instanceof IParameterizedSymbol && newSymbol instanceof IParameterizedSymbol )
|
||||
return isValidFunctionOverload( (IParameterizedSymbol) origSymbol, (IParameterizedSymbol) newSymbol );
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -875,7 +871,7 @@ public class ParserSymbolTable {
|
|||
symbol = (ISymbol) iter.next();
|
||||
if( symbol.isType( TypeInfo.t_template ) ){
|
||||
ITemplateSymbol template = (ITemplateSymbol) symbol;
|
||||
symbol = (ISymbol) template.getTemplatedSymbol();
|
||||
symbol = template.getTemplatedSymbol();
|
||||
}
|
||||
valid = ( symbol instanceof IParameterizedSymbol) && isValidFunctionOverload( (IParameterizedSymbol)symbol, (IParameterizedSymbol)newSymbol );
|
||||
}
|
||||
|
@ -1288,11 +1284,10 @@ public class ParserSymbolTable {
|
|||
if( num < numParameters ){
|
||||
if( function.hasVariableArgs() ) {
|
||||
continue;
|
||||
} else {
|
||||
}
|
||||
//not enough parameters, remove it
|
||||
iter.remove();
|
||||
}
|
||||
}
|
||||
//a candidate function having more than m parameters is viable only if the (m+1)-st
|
||||
//parameter has a default argument
|
||||
else {
|
||||
|
@ -1438,16 +1433,13 @@ public class ParserSymbolTable {
|
|||
if( parent == base ){
|
||||
if( throwIfNotVisible && !isVisible )
|
||||
throw new ParserSymbolTableException( ParserSymbolTableException.r_BadVisibility );
|
||||
else
|
||||
return 1;
|
||||
} else {
|
||||
}
|
||||
int n = hasBaseClass( parent, base, throwIfNotVisible );
|
||||
if( n > 0 ){
|
||||
if( n > 0 )
|
||||
return n + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
@ -2001,19 +1993,16 @@ public class ParserSymbolTable {
|
|||
if( secondCost.userDefined == Cost.AMBIGUOUS_USERDEFINED_CONVERSION ){
|
||||
//conversion is ambiguous -> ill-formed
|
||||
throw new ParserSymbolTableException( ParserSymbolTableException.r_Ambiguous );
|
||||
} else {
|
||||
}
|
||||
return thirdOp;
|
||||
}
|
||||
} else {
|
||||
if( thirdCost.userDefined == Cost.AMBIGUOUS_USERDEFINED_CONVERSION ){
|
||||
if( thirdCost.userDefined == Cost.AMBIGUOUS_USERDEFINED_CONVERSION )
|
||||
//conversion is ambiguous -> ill-formed
|
||||
throw new ParserSymbolTableException( ParserSymbolTableException.r_Ambiguous );
|
||||
} else {
|
||||
|
||||
return secondOp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -2227,15 +2216,14 @@ public class ParserSymbolTable {
|
|||
if( userDefined != 0 || cost.userDefined != 0 ){
|
||||
if( userDefined == 0 || cost.userDefined == 0 ){
|
||||
return cost.userDefined - userDefined;
|
||||
} else {
|
||||
}
|
||||
if( (userDefined == AMBIGUOUS_USERDEFINED_CONVERSION || cost.userDefined == AMBIGUOUS_USERDEFINED_CONVERSION) ||
|
||||
(userDefined != cost.userDefined ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// else they are the same constructor/conversion operator and are ranked
|
||||
//on the standard conversion sequence
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if( promotion > 0 || cost.promotion > 0 ){
|
||||
|
@ -2307,9 +2295,8 @@ public class ParserSymbolTable {
|
|||
IASTNode node = extension != null ? extension.getPrimaryDeclaration() : null;
|
||||
if( node != null && node instanceof IASTMember ){
|
||||
return ((IASTMember)node).getVisiblity();
|
||||
} else {
|
||||
throw new ParserSymbolTableError( ParserSymbolTableError.r_InternalError );
|
||||
}
|
||||
throw new ParserSymbolTableError( ParserSymbolTableError.r_InternalError );
|
||||
}
|
||||
|
||||
if( ! (qualifyingSymbol instanceof IDerivableContainerSymbol) ){
|
||||
|
|
|
@ -103,7 +103,7 @@ public class SpecializedSymbol extends TemplateSymbol implements ISpecializedSym
|
|||
IContainerSymbol instance = findInstantiation( actualArgs );
|
||||
if( instance != null ){
|
||||
return instance;
|
||||
} else {
|
||||
}
|
||||
IContainerSymbol symbol = null;
|
||||
|
||||
if( getContainedSymbols().size() == 1 ){
|
||||
|
@ -116,7 +116,7 @@ public class SpecializedSymbol extends TemplateSymbol implements ISpecializedSym
|
|||
processDeferredInstantiations();
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
|
|
@ -28,9 +28,9 @@ import org.eclipse.cdt.internal.core.parser.pst.TypeInfo.PtrOp;
|
|||
public final class TemplateEngine {
|
||||
|
||||
static protected TypeInfo instantiateTypeInfo( TypeInfo info, ITemplateSymbol template, Map argMap ) throws ParserSymbolTableException{
|
||||
if( argMap == null ){
|
||||
if( argMap == null )
|
||||
return info;
|
||||
} else {
|
||||
|
||||
if( info.isType( TypeInfo.t_type ) && info.getTypeSymbol() == null )
|
||||
return info;
|
||||
if( info.isType( TypeInfo.t_type ) && info.getTypeSymbol() instanceof IDeferredTemplateInstance ){
|
||||
|
@ -63,7 +63,7 @@ public final class TemplateEngine {
|
|||
return newInfo;
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static protected void instantiateDeferredTypeInfo( TypeInfo info, ITemplateSymbol template, Map argMap ) throws ParserSymbolTableException {
|
||||
|
@ -349,28 +349,26 @@ public final class TemplateEngine {
|
|||
if( symbol instanceof IDeferredTemplateInstance ){
|
||||
IDeferredTemplateInstance deferred = (IDeferredTemplateInstance) symbol;
|
||||
return deferred.getArguments();
|
||||
} else {
|
||||
}
|
||||
ISymbol instantiated = symbol.getInstantiatedSymbol();
|
||||
template = (ITemplateSymbol) instantiated.getContainingSymbol();
|
||||
}
|
||||
|
||||
|
||||
if( template instanceof ISpecializedSymbol ){
|
||||
return ((ISpecializedSymbol)template).getArgumentList();
|
||||
} else {
|
||||
return template.getParameterList();
|
||||
}
|
||||
return template.getParameterList();
|
||||
}
|
||||
|
||||
static private List getTargetList( ISymbol symbol ){
|
||||
if( symbol instanceof IDeferredTemplateInstance ){
|
||||
IDeferredTemplateInstance deferred = (IDeferredTemplateInstance) symbol;
|
||||
return deferred.getArguments();
|
||||
} else {
|
||||
}
|
||||
ISymbol instantiated = symbol.getInstantiatedSymbol();
|
||||
ITemplateSymbol template = (ITemplateSymbol) instantiated.getContainingSymbol();
|
||||
return template.findArgumentsFor( (IContainerSymbol) symbol );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param aSymbol
|
||||
|
@ -445,7 +443,7 @@ public final class TemplateEngine {
|
|||
throw new ParserSymbolTableException( ParserSymbolTableException.r_BadTypeInfo );
|
||||
if( symbol instanceof IDeferredTemplateInstance || symbol.isTemplateInstance() ){
|
||||
return deduceFromTemplateTemplateArguments(map, symbol, aSymbol);
|
||||
} else {
|
||||
}
|
||||
if( symbol.isType( TypeInfo.t_templateParameter ) ){
|
||||
if( symbol.getTypeInfo().getTemplateParameterType() == TypeInfo.t_typeName ){
|
||||
//a = getFlatTypeInfo( a );
|
||||
|
@ -465,20 +463,17 @@ public final class TemplateEngine {
|
|||
pOp = (PtrOp) pIter.next();
|
||||
if( !aIter.hasNext() ){
|
||||
return false;
|
||||
} else {
|
||||
}
|
||||
aOp = (PtrOp) aIter.next();
|
||||
if( pOp.getType() == aOp.getType() ){
|
||||
if( !pOp.equals( aOp ) ){
|
||||
if( !pOp.equals( aOp ) )
|
||||
return false;
|
||||
} else {
|
||||
aIter.remove();
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//cvlist T
|
||||
if( p.checkBit( TypeInfo.isConst ) ){
|
||||
if( !a.checkBit( TypeInfo.isConst ) )
|
||||
|
@ -500,10 +495,8 @@ public final class TemplateEngine {
|
|||
//non-type parameter
|
||||
if( symbol.getTypeInfo().getTemplateParameterType() == a.getType() ){
|
||||
return deduceArgument( map, symbol, a );
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//T (*) ( ), T ( T::* ) ( T ), & variations
|
||||
|
@ -536,7 +529,7 @@ public final class TemplateEngine {
|
|||
List aParams = aFunction.getParameterList();
|
||||
if( pParams.size() != aParams.size() ){
|
||||
return false;
|
||||
} else {
|
||||
}
|
||||
Iterator pIter = pParams.iterator();
|
||||
Iterator aIter = aParams.iterator();
|
||||
while( pIter.hasNext() ){
|
||||
|
@ -545,11 +538,10 @@ public final class TemplateEngine {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
if( p.isType( TypeInfo.t_templateParameter ) ){
|
||||
return deduceArgument( map, pSymbol, a );
|
||||
}
|
||||
|
@ -559,7 +551,6 @@ public final class TemplateEngine {
|
|||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -668,7 +659,7 @@ public final class TemplateEngine {
|
|||
return null;
|
||||
}
|
||||
|
||||
ISymbol templateSymbol = (ISymbol) template.getTemplatedSymbol();
|
||||
ISymbol templateSymbol = template.getTemplatedSymbol();
|
||||
if( !templateSymbol.isType( TypeInfo.t_function ) ){
|
||||
return null;
|
||||
}
|
||||
|
@ -706,11 +697,10 @@ public final class TemplateEngine {
|
|||
if( map.containsKey( p ) ){
|
||||
TypeInfo current = (TypeInfo)map.get( p );
|
||||
return current.equals( a );
|
||||
} else {
|
||||
}
|
||||
map.put( p, a );
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Compare spec1 to spec2. Return > 0 if spec1 is more specialized, < 0 if spec2
|
||||
* is more specialized, = 0 otherwise.
|
||||
|
@ -723,7 +713,7 @@ public final class TemplateEngine {
|
|||
return -1;
|
||||
}
|
||||
|
||||
ISymbol decl = (ISymbol) spec1.getTemplatedSymbol();
|
||||
ISymbol decl = spec1.getTemplatedSymbol();
|
||||
|
||||
//to order class template specializations, we need to transform them into function templates
|
||||
ITemplateSymbol template1 = spec1;
|
||||
|
@ -961,9 +951,8 @@ public final class TemplateEngine {
|
|||
//make sure parameters match up with found template
|
||||
if( checkTemplateParameterListsAreEquivalent( primary.getParameterList(), parameters ) ){
|
||||
return template;
|
||||
} else {
|
||||
throw new ParserSymbolTableException( ParserSymbolTableException.r_BadTemplateParameter );
|
||||
}
|
||||
throw new ParserSymbolTableException( ParserSymbolTableException.r_BadTemplateParameter );
|
||||
}
|
||||
|
||||
//specialization
|
||||
|
@ -1209,7 +1198,6 @@ public final class TemplateEngine {
|
|||
|
||||
if( map == null )
|
||||
continue;
|
||||
else {
|
||||
Iterator pIter = tmpl.getParameterList().iterator();
|
||||
Iterator aIter = args.iterator();
|
||||
while( pIter.hasNext() && aIter.hasNext() ){
|
||||
|
@ -1226,11 +1214,9 @@ public final class TemplateEngine {
|
|||
//made it this far, its a match
|
||||
if( template != null ){
|
||||
throw new ParserSymbolTableException(ParserSymbolTableException.r_Ambiguous );
|
||||
} else {
|
||||
}
|
||||
template = tmpl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return template;
|
||||
}
|
||||
|
|
|
@ -253,7 +253,7 @@ public class TemplateFactory extends ExtensibleSymbol implements ITemplateFactor
|
|||
if( previous == null ) {
|
||||
//could happen in trying to define something for which we don't have a declaration
|
||||
throw new ParserSymbolTableException( ParserSymbolTableException.r_BadTemplate );
|
||||
} else {
|
||||
}
|
||||
IContainerSymbol originalContainer = previous.getContainingSymbol();
|
||||
|
||||
if( previous.isForwardDeclaration() ){
|
||||
|
@ -271,8 +271,6 @@ public class TemplateFactory extends ExtensibleSymbol implements ITemplateFactor
|
|||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void doDefinitionParameterMaps( ISymbol newSymbol ) throws ParserSymbolTableException {
|
||||
if( templates.size() != symbols.size() ){
|
||||
throw new ParserSymbolTableException( ParserSymbolTableException.r_BadTemplate );
|
||||
|
@ -357,9 +355,8 @@ public class TemplateFactory extends ExtensibleSymbol implements ITemplateFactor
|
|||
}
|
||||
if( look instanceof ITemplateSymbol ){
|
||||
return ((ITemplateSymbol)look).getTemplatedSymbol();
|
||||
} else {
|
||||
return look;
|
||||
}
|
||||
return look;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -530,7 +527,6 @@ public class TemplateFactory extends ExtensibleSymbol implements ITemplateFactor
|
|||
|
||||
if( !tIter.hasNext() )
|
||||
return null;
|
||||
else
|
||||
return (ITemplateSymbol) tIter.next();
|
||||
}
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ public class TemplateSymbol extends ParameterizedSymbol implements ITemplateSymb
|
|||
IContainerSymbol instance = findInstantiation( actualArgs );
|
||||
if( instance != null ){
|
||||
return instance;
|
||||
} else {
|
||||
}
|
||||
if( template.isType( TypeInfo.t_templateParameter ) ){
|
||||
//template template parameter. must defer instantiation
|
||||
return deferredInstance( arguments );
|
||||
|
@ -156,7 +156,6 @@ public class TemplateSymbol extends ParameterizedSymbol implements ITemplateSymb
|
|||
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
|
||||
public ISymbol instantiate( ITemplateSymbol template, Map argMap ) throws ParserSymbolTableException{
|
||||
if( !isTemplateMember() ){
|
||||
|
|
|
@ -75,18 +75,16 @@ public class TypeFilter {
|
|||
( acceptedKinds.contains( LookupKind.METHODS ) && symbolIsMember ) )
|
||||
{
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else if ( typeInfo.isType( TypeInfo.t_type ) && typeInfo.checkBit( TypeInfo.isTypedef ) ){
|
||||
if( acceptedKinds.contains( LookupKind.TYPEDEFS ) ||
|
||||
acceptedKinds.contains( LookupKind.TYPES ) )
|
||||
{
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else if ( typeInfo.isType( TypeInfo.t_type ) || typeInfo.isType( TypeInfo.t__Bool, TypeInfo.t_void ) )
|
||||
{
|
||||
|
@ -95,9 +93,8 @@ public class TypeFilter {
|
|||
( acceptedKinds.contains( LookupKind.FIELDS ) && symbolIsMember ) )
|
||||
{
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -307,9 +307,8 @@ public class TypeInfo {
|
|||
//upperType of 0 means no range
|
||||
if( upperType == TypeInfo.t_undef ){
|
||||
return ( getType() == type );
|
||||
} else {
|
||||
return ( getType().compareTo( type ) >= 0 && getType().compareTo( upperType ) <= 0 );
|
||||
}
|
||||
return ( getType().compareTo( type ) >= 0 && getType().compareTo( upperType ) <= 0 );
|
||||
}
|
||||
|
||||
public ISymbol getTypeSymbol(){
|
||||
|
@ -450,11 +449,10 @@ public class TypeInfo {
|
|||
public boolean canHold( TypeInfo type ){
|
||||
if( getType().compareTo( type.getType()) > 0 ){
|
||||
return true;
|
||||
} else {
|
||||
}
|
||||
int mask = TypeInfo.isShort | TypeInfo.isLong | TypeInfo.isLongLong;
|
||||
return ( getTypeInfo() & mask ) >= ( type.getTypeInfo() & mask );
|
||||
}
|
||||
}
|
||||
|
||||
public boolean equals( Object t ){
|
||||
if( t == null || !(t instanceof TypeInfo) ){
|
||||
|
@ -528,9 +526,8 @@ public class TypeInfo {
|
|||
public String toString(){
|
||||
if( isType( TypeInfo.t_type ) ){
|
||||
return _typeDeclaration.getName();
|
||||
} else {
|
||||
return TypeInfo._image[ getType().toInt() ];
|
||||
}
|
||||
return TypeInfo._image[ getType().toInt() ];
|
||||
}
|
||||
|
||||
private int _typeInfo = 0;
|
||||
|
|
|
@ -2948,7 +2948,7 @@ public class Scanner implements IScanner {
|
|||
scannerExtension );
|
||||
tokenizer.setThrowExceptionOnBadCharacterRead(false);
|
||||
IToken t = null;
|
||||
StringBuffer strbuff = new StringBuffer();
|
||||
StringBuffer strBuff2 = new StringBuffer();
|
||||
boolean space = false;
|
||||
|
||||
try {
|
||||
|
@ -2961,26 +2961,26 @@ public class Scanner implements IScanner {
|
|||
t = (forStringizing ? tokenizer.nextTokenForStringizing() : tokenizer.nextToken(false));
|
||||
|
||||
if (space)
|
||||
strbuff.append( ' ' );
|
||||
strBuff2.append( ' ' );
|
||||
|
||||
switch (t.getType()) {
|
||||
case IToken.tSTRING :
|
||||
strbuff.append('\"');
|
||||
strbuff.append(t.getImage());
|
||||
strbuff.append('\"');
|
||||
strBuff2.append('\"');
|
||||
strBuff2.append(t.getImage());
|
||||
strBuff2.append('\"');
|
||||
break;
|
||||
case IToken.tLSTRING :
|
||||
strbuff.append( "L\""); //$NON-NLS-1$
|
||||
strbuff.append(t.getImage());
|
||||
strbuff.append('\"');
|
||||
strBuff2.append( "L\""); //$NON-NLS-1$
|
||||
strBuff2.append(t.getImage());
|
||||
strBuff2.append('\"');
|
||||
break;
|
||||
case IToken.tCHAR :
|
||||
strbuff.append('\'');
|
||||
strbuff.append(t.getImage());
|
||||
strbuff.append('\'');
|
||||
strBuff2.append('\'');
|
||||
strBuff2.append(t.getImage());
|
||||
strBuff2.append('\'');
|
||||
break;
|
||||
default :
|
||||
strbuff.append( t.getImage());
|
||||
strBuff2.append( t.getImage());
|
||||
break;
|
||||
}
|
||||
space = true;
|
||||
|
@ -2988,7 +2988,7 @@ public class Scanner implements IScanner {
|
|||
}
|
||||
catch (EndOfFileException e) {
|
||||
// Good
|
||||
parameterValues.add(strbuff.toString());
|
||||
parameterValues.add(strBuff2.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ public class ScannerStringBuffer {
|
|||
public ScannerStringBuffer(int initialSize) {
|
||||
current_size = initialSize;
|
||||
s_buff = new char[current_size];
|
||||
int s_pos = 0;
|
||||
s_pos = 0;
|
||||
}
|
||||
public final void startString(){
|
||||
s_pos = 0;
|
||||
|
|
|
@ -10,13 +10,17 @@
|
|||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser.token;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
|
||||
|
||||
/**
|
||||
* @author johnc
|
||||
*/
|
||||
public abstract class AbstractToken implements IToken {
|
||||
public abstract class AbstractToken implements IToken, ITokenDuple {
|
||||
|
||||
public AbstractToken( int type, int lineNumber )
|
||||
{
|
||||
|
@ -30,7 +34,7 @@ public abstract class AbstractToken implements IToken {
|
|||
}
|
||||
|
||||
public String toString() {
|
||||
return "Token=" + getType() + " \"" + getImage() + " @ line:" + getLineNumber() + " offset=" + getOffset(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
||||
return getImage();
|
||||
}
|
||||
|
||||
public abstract String getImage();
|
||||
|
@ -52,6 +56,7 @@ public abstract class AbstractToken implements IToken {
|
|||
protected int type;
|
||||
protected int lineNumber = 1;
|
||||
protected IToken next = null;
|
||||
private String [] qualifiedName = null;
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#equals(java.lang.Object)
|
||||
|
@ -167,4 +172,149 @@ public abstract class AbstractToken implements IToken {
|
|||
public final IToken getNext() { return next; }
|
||||
public void setNext(IToken t) { next = t; }
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#consumeTemplateIdArguments(org.eclipse.cdt.core.parser.IToken, java.util.Iterator)
|
||||
*/
|
||||
public IToken consumeTemplateIdArguments(IToken name, Iterator iter) {
|
||||
return this;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#contains(org.eclipse.cdt.core.parser.ITokenDuple)
|
||||
*/
|
||||
public boolean contains(ITokenDuple duple) {
|
||||
return ( duple.getFirstToken() == duple.getLastToken() ) && ( duple.getFirstToken() == this );
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#extractNameFromTemplateId()
|
||||
*/
|
||||
public String extractNameFromTemplateId(){
|
||||
return getImage();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#findLastTokenType(int)
|
||||
*/
|
||||
public int findLastTokenType(int t) {
|
||||
if( getType() == t ) return 0;
|
||||
return -1;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#getFirstToken()
|
||||
*/
|
||||
public IToken getFirstToken() {
|
||||
return this;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#getLastSegment()
|
||||
*/
|
||||
public ITokenDuple getLastSegment() {
|
||||
return this;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#getLastToken()
|
||||
*/
|
||||
public IToken getLastToken() {
|
||||
return this;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#getLeadingSegments()
|
||||
*/
|
||||
public ITokenDuple getLeadingSegments() {
|
||||
return null;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#getSegmentCount()
|
||||
*/
|
||||
public int getSegmentCount() {
|
||||
return 1;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#getStartOffset()
|
||||
*/
|
||||
public int getStartOffset() {
|
||||
return 0;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#getSubrange(int, int)
|
||||
*/
|
||||
public ITokenDuple getSubrange(int startIndex, int endIndex) {
|
||||
if( startIndex == 0 && endIndex == 0 ) return this;
|
||||
return null;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#getTemplateIdArgLists()
|
||||
*/
|
||||
public List[] getTemplateIdArgLists() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#getToken(int)
|
||||
*/
|
||||
public IToken getToken(int index) {
|
||||
if( index == 0 ) return this;
|
||||
return null;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#isIdentifier()
|
||||
*/
|
||||
public boolean isIdentifier() {
|
||||
return ( getType() == IToken.tIDENTIFIER );
|
||||
}
|
||||
|
||||
|
||||
private class SingleIterator implements Iterator
|
||||
{
|
||||
boolean hasNext = true;
|
||||
/* (non-Javadoc)
|
||||
* @see java.util.Iterator#remove()
|
||||
*/
|
||||
public void remove() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.util.Iterator#hasNext()
|
||||
*/
|
||||
public boolean hasNext() {
|
||||
return hasNext;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.util.Iterator#next()
|
||||
*/
|
||||
public Object next() {
|
||||
hasNext = false;
|
||||
return AbstractToken.this;
|
||||
}
|
||||
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#iterator()
|
||||
*/
|
||||
public Iterator iterator() {
|
||||
return new SingleIterator();
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#length()
|
||||
*/
|
||||
public int length() {
|
||||
return 1;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#syntaxOfName()
|
||||
*/
|
||||
public boolean syntaxOfName() {
|
||||
return ( getType() == IToken.tIDENTIFIER );
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ITokenDuple#toQualifiedName()
|
||||
*/
|
||||
public String[] toQualifiedName() {
|
||||
if( qualifiedName == null )
|
||||
{
|
||||
qualifiedName = new String[1];
|
||||
qualifiedName[0] = getImage();
|
||||
}
|
||||
return qualifiedName;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ import org.eclipse.cdt.core.parser.ITokenDuple;
|
|||
*/
|
||||
public class TokenDuple implements ITokenDuple {
|
||||
|
||||
public TokenDuple( IToken first, IToken last )
|
||||
TokenDuple( IToken first, IToken last )
|
||||
{
|
||||
// assert ( first != null && last != null ) : this;
|
||||
firstToken = first;
|
||||
|
@ -33,7 +33,7 @@ public class TokenDuple implements ITokenDuple {
|
|||
argLists = null;
|
||||
}
|
||||
|
||||
public TokenDuple( IToken first, IToken last, List templateArgLists ){
|
||||
TokenDuple( IToken first, IToken last, List templateArgLists ){
|
||||
firstToken = first;
|
||||
lastToken = last;
|
||||
if( templateArgLists != null && !templateArgLists.isEmpty() ){
|
||||
|
@ -43,7 +43,7 @@ public class TokenDuple implements ITokenDuple {
|
|||
}
|
||||
}
|
||||
|
||||
public TokenDuple( ITokenDuple firstDuple, ITokenDuple secondDuple ){
|
||||
TokenDuple( ITokenDuple firstDuple, ITokenDuple secondDuple ){
|
||||
firstToken = firstDuple.getFirstToken();
|
||||
lastToken = secondDuple.getLastToken();
|
||||
|
||||
|
|
|
@ -10,7 +10,10 @@
|
|||
***********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.parser.token;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
import org.eclipse.cdt.internal.core.parser.scanner.IScannerContext;
|
||||
import org.eclipse.cdt.internal.core.parser.scanner.IScannerData;
|
||||
|
||||
|
@ -49,4 +52,20 @@ public class TokenFactory {
|
|||
{
|
||||
return new ImagedToken( type, image);
|
||||
}
|
||||
|
||||
public static ITokenDuple createTokenDuple( IToken first, IToken last )
|
||||
{
|
||||
if( (first == last) && ( first instanceof ITokenDuple )) return (ITokenDuple) first;
|
||||
return new TokenDuple( first, last );
|
||||
}
|
||||
|
||||
public static ITokenDuple createTokenDuple( IToken first, IToken last, List templateArgLists )
|
||||
{
|
||||
if( (first == last) && ( templateArgLists == null ) && ( first instanceof ITokenDuple )) return (ITokenDuple) first;
|
||||
return new TokenDuple( first, last, templateArgLists );
|
||||
}
|
||||
|
||||
public static ITokenDuple createTokenDuple( ITokenDuple firstDuple, ITokenDuple secondDuple ){
|
||||
return new TokenDuple( firstDuple, secondDuple );
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue