mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-13 03:05:39 +02:00
added token mapping to CPPBuildASTParserAction
This commit is contained in:
parent
af61802112
commit
5ef40f0eff
6 changed files with 109 additions and 63 deletions
|
@ -54,6 +54,7 @@ public class LRParserTestSuite extends TestSuite {
|
||||||
|
|
||||||
addTestSuite(LRCPPSpecTest.class);
|
addTestSuite(LRCPPSpecTest.class);
|
||||||
addTestSuite(LRCPPTests.class);
|
addTestSuite(LRCPPTests.class);
|
||||||
|
addTestSuite(LRTemplateTests.class);
|
||||||
|
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
package org.eclipse.cdt.core.lrparser.tests;
|
||||||
|
|
||||||
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
|
import org.eclipse.cdt.core.dom.lrparser.c99.C99Language;
|
||||||
|
import org.eclipse.cdt.core.dom.lrparser.cpp.ISOCPPLanguage;
|
||||||
|
import org.eclipse.cdt.core.model.ILanguage;
|
||||||
|
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||||
|
import org.eclipse.cdt.core.parser.tests.ast2.AST2TemplateTests;
|
||||||
|
import org.eclipse.cdt.internal.core.parser.ParserException;
|
||||||
|
|
||||||
|
@SuppressWarnings("restriction")
|
||||||
|
public class LRTemplateTests extends AST2TemplateTests {
|
||||||
|
|
||||||
|
|
||||||
|
public static TestSuite suite() {
|
||||||
|
return suite(LRTemplateTests.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
protected IASTTranslationUnit parse( String code, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems, boolean parseComments) throws ParserException {
|
||||||
|
ILanguage language = lang.isCPP() ? getCPPLanguage() : getC99Language();
|
||||||
|
return ParseHelper.parse(code, language, expectNoProblems);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ILanguage getC99Language() {
|
||||||
|
return C99Language.getDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ILanguage getCPPLanguage() {
|
||||||
|
return ISOCPPLanguage.getDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
#Fri Apr 25 15:09:24 EDT 2008
|
#Wed Apr 30 13:42:53 EDT 2008
|
||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.5
|
org.eclipse.jdt.core.compiler.compliance=1.5
|
||||||
|
@ -52,7 +52,7 @@ org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
|
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
|
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
|
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedImport=error
|
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
|
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
|
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
|
||||||
|
|
|
@ -93,18 +93,14 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private int baseKind(IToken token) {
|
||||||
|
return tokenMap.mapKind(token.getKind());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isCompletionToken(IToken token) {
|
protected boolean isCompletionToken(IToken token) {
|
||||||
return asC99Kind(token) == TK_Completion;
|
return baseKind(token) == TK_Completion;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private int asC99Kind(IToken token) {
|
|
||||||
return asC99Kind(token.getKind());
|
|
||||||
}
|
|
||||||
|
|
||||||
private int asC99Kind(int tokenKind) {
|
|
||||||
return tokenMap.mapKind(tokenKind);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -203,7 +199,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
||||||
return;
|
return;
|
||||||
IToken token = (IToken)specifier;
|
IToken token = (IToken)specifier;
|
||||||
|
|
||||||
int kind = asC99Kind(token);
|
int kind = baseKind(token);
|
||||||
switch(kind){
|
switch(kind){
|
||||||
case TK_typedef: node.setStorageClass(IASTDeclSpecifier.sc_typedef); return;
|
case TK_typedef: node.setStorageClass(IASTDeclSpecifier.sc_typedef); return;
|
||||||
case TK_extern: node.setStorageClass(IASTDeclSpecifier.sc_extern); return;
|
case TK_extern: node.setStorageClass(IASTDeclSpecifier.sc_extern); return;
|
||||||
|
@ -245,7 +241,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
||||||
*/
|
*/
|
||||||
private void collectArrayModifierTypeQualifiers(ICASTArrayModifier arrayModifier) {
|
private void collectArrayModifierTypeQualifiers(ICASTArrayModifier arrayModifier) {
|
||||||
for(Object o : astStack.closeScope()) {
|
for(Object o : astStack.closeScope()) {
|
||||||
switch(asC99Kind((IToken)o)) {
|
switch(baseKind((IToken)o)) {
|
||||||
case TK_const: arrayModifier.setConst(true); break;
|
case TK_const: arrayModifier.setConst(true); break;
|
||||||
case TK_restrict: arrayModifier.setRestrict(true); break;
|
case TK_restrict: arrayModifier.setRestrict(true); break;
|
||||||
case TK_volatile: arrayModifier.setVolatile(true); break;
|
case TK_volatile: arrayModifier.setVolatile(true); break;
|
||||||
|
@ -350,7 +346,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
||||||
|
|
||||||
for(Object o : astStack.closeScope()) {
|
for(Object o : astStack.closeScope()) {
|
||||||
IToken token = (IToken)o;
|
IToken token = (IToken)o;
|
||||||
switch(asC99Kind(token)) {
|
switch(baseKind(token)) {
|
||||||
default: assert false;
|
default: assert false;
|
||||||
case TK_const: pointer.setConst(true); break;
|
case TK_const: pointer.setConst(true); break;
|
||||||
case TK_volatile: pointer.setVolatile(true); break;
|
case TK_volatile: pointer.setVolatile(true); break;
|
||||||
|
@ -500,7 +496,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
||||||
if(o instanceof IToken) {
|
if(o instanceof IToken) {
|
||||||
IToken token = (IToken) o;
|
IToken token = (IToken) o;
|
||||||
// There is one identifier token on the stack
|
// There is one identifier token on the stack
|
||||||
int kind = asC99Kind(token);
|
int kind = baseKind(token);
|
||||||
if(kind == TK_identifier || kind == TK_Completion) {
|
if(kind == TK_identifier || kind == TK_Completion) {
|
||||||
IASTName name = createName(token);
|
IASTName name = createName(token);
|
||||||
//name.setBinding(binding);
|
//name.setBinding(binding);
|
||||||
|
@ -532,7 +528,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
||||||
IASTDeclSpecifier declSpecifier = (IASTDeclSpecifier) astStack.pop();
|
IASTDeclSpecifier declSpecifier = (IASTDeclSpecifier) astStack.pop();
|
||||||
|
|
||||||
List<IToken> ruleTokens = parser.getRuleTokens();
|
List<IToken> ruleTokens = parser.getRuleTokens();
|
||||||
if(ruleTokens.size() == 1 && asC99Kind(ruleTokens.get(0)) == TK_EndOfCompletion)
|
if(ruleTokens.size() == 1 && baseKind(ruleTokens.get(0)) == TK_EndOfCompletion)
|
||||||
return; // do not generate nodes for extra EOC tokens
|
return; // do not generate nodes for extra EOC tokens
|
||||||
|
|
||||||
IASTSimpleDeclaration declaration = nodeFactory.newSimpleDeclaration(declSpecifier);
|
IASTSimpleDeclaration declaration = nodeFactory.newSimpleDeclaration(declSpecifier);
|
||||||
|
@ -558,7 +554,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
||||||
|
|
||||||
// Don't generate declaration nodes for extra EOC tokens
|
// Don't generate declaration nodes for extra EOC tokens
|
||||||
// TODO: the token type must be converted
|
// TODO: the token type must be converted
|
||||||
if(asC99Kind(parser.getLeftIToken()) == C99Parsersym.TK_EndOfCompletion)
|
if(baseKind(parser.getLeftIToken()) == C99Parsersym.TK_EndOfCompletion)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
IASTDeclSpecifier declSpecifier = nodeFactory.newCSimpleDeclSpecifier();
|
IASTDeclSpecifier declSpecifier = nodeFactory.newCSimpleDeclSpecifier();
|
||||||
|
|
|
@ -28,6 +28,7 @@ public class CPPASTAmbiguousDeclarator extends CPPASTAmbiguity implements IASTDe
|
||||||
|
|
||||||
|
|
||||||
public CPPASTAmbiguousDeclarator(IASTDeclarator ... ds) {
|
public CPPASTAmbiguousDeclarator(IASTDeclarator ... ds) {
|
||||||
|
System.out.println("CPPASTAmbiguousDeclarator created");
|
||||||
for(IASTDeclarator declarator : ds)
|
for(IASTDeclarator declarator : ds)
|
||||||
addDeclarator(declarator);
|
addDeclarator(declarator);
|
||||||
}
|
}
|
||||||
|
@ -76,11 +77,10 @@ public class CPPASTAmbiguousDeclarator extends CPPASTAmbiguity implements IASTDe
|
||||||
|
|
||||||
if( scope != null ) {
|
if( scope != null ) {
|
||||||
try {
|
try {
|
||||||
ASTInternal.flushCache(scope);
|
IScope parentScope = scope;
|
||||||
IScope parentScope = scope.getParent(); // needed to fix bugs
|
do {
|
||||||
if(parentScope != null) {
|
|
||||||
ASTInternal.flushCache(parentScope);
|
ASTInternal.flushCache(parentScope);
|
||||||
}
|
} while((parentScope = parentScope.getParent()) != null);
|
||||||
} catch (DOMException de) {}
|
} catch (DOMException de) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ package org.eclipse.cdt.core.dom.lrparser.action.cpp;
|
||||||
|
|
||||||
import static org.eclipse.cdt.core.parser.util.CollectionUtils.findFirstAndRemove;
|
import static org.eclipse.cdt.core.parser.util.CollectionUtils.findFirstAndRemove;
|
||||||
import static org.eclipse.cdt.core.parser.util.CollectionUtils.reverseIterable;
|
import static org.eclipse.cdt.core.parser.util.CollectionUtils.reverseIterable;
|
||||||
|
import static org.eclipse.cdt.internal.core.dom.lrparser.c99.C99Parsersym.TK_Completion;
|
||||||
import static org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPParsersym.*;
|
import static org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPParsersym.*;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -88,7 +89,10 @@ import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||||
import org.eclipse.cdt.core.dom.lrparser.LPGTokenAdapter;
|
import org.eclipse.cdt.core.dom.lrparser.LPGTokenAdapter;
|
||||||
import org.eclipse.cdt.core.dom.lrparser.action.BuildASTParserAction;
|
import org.eclipse.cdt.core.dom.lrparser.action.BuildASTParserAction;
|
||||||
|
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||||
|
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||||
import org.eclipse.cdt.core.parser.util.DebugUtil;
|
import org.eclipse.cdt.core.parser.util.DebugUtil;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99Parsersym;
|
||||||
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPExpressionStatementParser;
|
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPExpressionStatementParser;
|
||||||
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPNoCastExpressionParser;
|
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPNoCastExpressionParser;
|
||||||
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPNoFunctionDeclaratorParser;
|
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPNoFunctionDeclaratorParser;
|
||||||
|
@ -107,6 +111,8 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator;
|
||||||
@SuppressWarnings("restriction")
|
@SuppressWarnings("restriction")
|
||||||
public class CPPBuildASTParserAction extends BuildASTParserAction {
|
public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
|
|
||||||
|
/** Allows code in this class to refer to the token kinds in CPPParsersym */
|
||||||
|
private final ITokenMap tokenMap;
|
||||||
|
|
||||||
/** Used to create the AST node objects */
|
/** Used to create the AST node objects */
|
||||||
protected final ICPPASTNodeFactory nodeFactory;
|
protected final ICPPASTNodeFactory nodeFactory;
|
||||||
|
@ -119,14 +125,21 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
public CPPBuildASTParserAction(ICPPASTNodeFactory nodeFactory, IParserActionTokenProvider parser, IASTTranslationUnit tu) {
|
public CPPBuildASTParserAction(ICPPASTNodeFactory nodeFactory, IParserActionTokenProvider parser, IASTTranslationUnit tu) {
|
||||||
super(nodeFactory, parser, tu);
|
super(nodeFactory, parser, tu);
|
||||||
this.nodeFactory = nodeFactory;
|
this.nodeFactory = nodeFactory;
|
||||||
|
this.tokenMap = new TokenMap(CPPParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private int baseKind(IToken token) {
|
||||||
|
return tokenMap.mapKind(token.getKind());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isCompletionToken(IToken token) {
|
protected boolean isCompletionToken(IToken token) {
|
||||||
return token.getKind() == CPPParsersym.TK_Completion;
|
return baseKind(token) == TK_Completion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected IParser getExpressionStatementParser() {
|
protected IParser getExpressionStatementParser() {
|
||||||
return new CPPExpressionStatementParser(parser.getOrderedTerminalSymbols());
|
return new CPPExpressionStatementParser(parser.getOrderedTerminalSymbols());
|
||||||
|
@ -269,10 +282,10 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static int asICPPASTSimpleTypeConstructorExpressionType(IToken token) {
|
private int asICPPASTSimpleTypeConstructorExpressionType(IToken token) {
|
||||||
assert token != null;
|
assert token != null;
|
||||||
|
|
||||||
switch(token.getKind()) {
|
switch(baseKind(token)) {
|
||||||
case TK_char : return ICPPASTSimpleTypeConstructorExpression.t_char;
|
case TK_char : return ICPPASTSimpleTypeConstructorExpression.t_char;
|
||||||
case TK_wchar_t : return ICPPASTSimpleTypeConstructorExpression.t_wchar_t;
|
case TK_wchar_t : return ICPPASTSimpleTypeConstructorExpression.t_wchar_t;
|
||||||
case TK_bool : return ICPPASTSimpleTypeConstructorExpression.t_bool;
|
case TK_bool : return ICPPASTSimpleTypeConstructorExpression.t_bool;
|
||||||
|
@ -765,7 +778,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static String createStringRepresentation(List<IToken> nameTokens) {
|
private String createStringRepresentation(List<IToken> nameTokens) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
IToken prev = null;
|
IToken prev = null;
|
||||||
for(IToken t : nameTokens) {
|
for(IToken t : nameTokens) {
|
||||||
|
@ -778,13 +791,13 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static boolean needSpaceBetween(IToken prev, IToken iter) {
|
private boolean needSpaceBetween(IToken prev, IToken iter) {
|
||||||
// this logic was copied from BasicTokenDuple.createCharArrayRepresentation()
|
// this logic was copied from BasicTokenDuple.createCharArrayRepresentation()
|
||||||
if(prev == null)
|
if(prev == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
int prevKind = prev.getKind();
|
int prevKind = baseKind(prev);
|
||||||
int iterKind = iter.getKind();
|
int iterKind = baseKind(iter);
|
||||||
|
|
||||||
return prevKind != TK_ColonColon &&
|
return prevKind != TK_ColonColon &&
|
||||||
prevKind != TK_identifier &&
|
prevKind != TK_identifier &&
|
||||||
|
@ -1047,8 +1060,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
* object to determine how to set a specifier.
|
* object to determine how to set a specifier.
|
||||||
*/
|
*/
|
||||||
protected void setSpecifier(ICPPASTDeclSpecifier node, IToken token) {
|
protected void setSpecifier(ICPPASTDeclSpecifier node, IToken token) {
|
||||||
//TODO int kind = asC99Kind(token)
|
int kind = baseKind(token);
|
||||||
int kind = token.getKind();
|
|
||||||
switch(kind){
|
switch(kind){
|
||||||
case TK_typedef: node.setStorageClass(IASTDeclSpecifier.sc_typedef); return;
|
case TK_typedef: node.setStorageClass(IASTDeclSpecifier.sc_typedef); return;
|
||||||
case TK_extern: node.setStorageClass(IASTDeclSpecifier.sc_extern); return;
|
case TK_extern: node.setStorageClass(IASTDeclSpecifier.sc_extern); return;
|
||||||
|
@ -1083,7 +1095,6 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1171,8 +1182,8 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static int getElaboratedTypeSpecifier(IToken token) {
|
private int getElaboratedTypeSpecifier(IToken token) {
|
||||||
int kind = token.getKind();
|
int kind = baseKind(token);
|
||||||
switch(kind) {
|
switch(kind) {
|
||||||
default: assert false : "wrong token kind: " + kind; //$NON-NLS-1$
|
default: assert false : "wrong token kind: " + kind; //$NON-NLS-1$
|
||||||
case TK_struct: return IASTElaboratedTypeSpecifier.k_struct;
|
case TK_struct: return IASTElaboratedTypeSpecifier.k_struct;
|
||||||
|
@ -1213,7 +1224,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
if(declarators.isEmpty() &&
|
if(declarators.isEmpty() &&
|
||||||
declSpecifier instanceof ICPPASTNamedTypeSpecifier &&
|
declSpecifier instanceof ICPPASTNamedTypeSpecifier &&
|
||||||
ruleTokens.size() >= 2 &&
|
ruleTokens.size() >= 2 &&
|
||||||
(nameToken = ruleTokens.get(ruleTokens.size() - 2)).getKind() == TK_identifier) {
|
baseKind(nameToken = ruleTokens.get(ruleTokens.size() - 2)) == TK_identifier) {
|
||||||
|
|
||||||
declSpecifier = nodeFactory.newSimpleDeclSpecifier();
|
declSpecifier = nodeFactory.newSimpleDeclSpecifier();
|
||||||
for(IToken t : ruleTokens.subList(0, ruleTokens.size()-1))
|
for(IToken t : ruleTokens.subList(0, ruleTokens.size()-1))
|
||||||
|
@ -1247,22 +1258,23 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
public void consumeInitDeclaratorComplete() {
|
public void consumeInitDeclaratorComplete() {
|
||||||
if(TRACE_ACTIONS) DebugUtil.printMethodTrace();
|
if(TRACE_ACTIONS) DebugUtil.printMethodTrace();
|
||||||
|
|
||||||
IASTDeclarator declarator = (IASTDeclarator) astStack.peek();
|
// System.out.println(parser.getRuleTokens());
|
||||||
if(!(declarator instanceof IASTFunctionDeclarator))
|
// IASTDeclarator declarator = (IASTDeclarator) astStack.peek();
|
||||||
return;
|
// if(!(declarator instanceof IASTFunctionDeclarator))
|
||||||
|
// return;
|
||||||
IParser secondaryParser = new CPPNoFunctionDeclaratorParser(parser.getOrderedTerminalSymbols());
|
//
|
||||||
IASTNode alternateDeclarator = runSecondaryParser(secondaryParser);
|
// IParser secondaryParser = new CPPNoFunctionDeclaratorParser(parser.getOrderedTerminalSymbols());
|
||||||
|
// IASTNode alternateDeclarator = runSecondaryParser(secondaryParser);
|
||||||
if(alternateDeclarator == null || alternateDeclarator instanceof IASTProblemDeclaration)
|
//
|
||||||
return;
|
// if(alternateDeclarator == null || alternateDeclarator instanceof IASTProblemDeclaration)
|
||||||
|
// return;
|
||||||
astStack.pop();
|
//
|
||||||
IASTNode ambiguityNode = new CPPASTAmbiguousDeclarator(declarator, (IASTDeclarator)alternateDeclarator);
|
// astStack.pop();
|
||||||
|
// IASTNode ambiguityNode = new CPPASTAmbiguousDeclarator(declarator, (IASTDeclarator)alternateDeclarator);
|
||||||
setOffsetAndLength(ambiguityNode);
|
//
|
||||||
astStack.push(ambiguityNode);
|
// setOffsetAndLength(ambiguityNode);
|
||||||
|
// astStack.push(ambiguityNode);
|
||||||
|
//
|
||||||
if(TRACE_AST_STACK) System.out.println(astStack);
|
if(TRACE_AST_STACK) System.out.println(astStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1285,8 +1297,8 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static int getAccessSpecifier(IToken token) {
|
private int getAccessSpecifier(IToken token) {
|
||||||
int kind = token.getKind();
|
int kind = baseKind(token);
|
||||||
switch(kind) {
|
switch(kind) {
|
||||||
default: assert false : "wrong token kind: " + kind; //$NON-NLS-1$
|
default: assert false : "wrong token kind: " + kind; //$NON-NLS-1$
|
||||||
case TK_private: return ICPPASTVisibilityLabel.v_private;
|
case TK_private: return ICPPASTVisibilityLabel.v_private;
|
||||||
|
@ -1396,8 +1408,8 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static int getCompositeTypeSpecifier(IToken token) {
|
private int getCompositeTypeSpecifier(IToken token) {
|
||||||
int kind = token.getKind();
|
final int kind = baseKind(token);
|
||||||
switch(kind) {
|
switch(kind) {
|
||||||
default: assert false : "wrong token kind: " + kind; //$NON-NLS-1$
|
default: assert false : "wrong token kind: " + kind; //$NON-NLS-1$
|
||||||
case TK_struct: return IASTCompositeTypeSpecifier.k_struct;
|
case TK_struct: return IASTCompositeTypeSpecifier.k_struct;
|
||||||
|
@ -1424,10 +1436,10 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void addCVQualifiersToPointer(IASTPointer pointer, List<Object> tokens) {
|
private void addCVQualifiersToPointer(IASTPointer pointer, List<Object> tokens) {
|
||||||
for(Object t : tokens) {
|
for(Object t : tokens) {
|
||||||
IToken token = (IToken) t;
|
IToken token = (IToken) t;
|
||||||
int kind = token.getKind(); // TODO this should be asXXXKind
|
int kind = baseKind(token);
|
||||||
switch(kind) {
|
switch(kind) {
|
||||||
default : assert false;
|
default : assert false;
|
||||||
case TK_const: pointer.setConst(true); break;
|
case TK_const: pointer.setConst(true); break;
|
||||||
|
@ -1468,7 +1480,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
|
|
||||||
// find the last double colon by searching for it
|
// find the last double colon by searching for it
|
||||||
for(IToken t : reverseIterable(parser.getRuleTokens())) {
|
for(IToken t : reverseIterable(parser.getRuleTokens())) {
|
||||||
if(t.getKind() == TK_ColonColon) {
|
if(baseKind(t) == TK_ColonColon) {
|
||||||
endOffset = endOffset(t);
|
endOffset = endOffset(t);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1518,7 +1530,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Object token : astStack.closeScope()) {
|
for(Object token : astStack.closeScope()) {
|
||||||
int kind = ((IToken)token).getKind();
|
int kind = baseKind((IToken)token);
|
||||||
switch(kind) {
|
switch(kind) {
|
||||||
default: assert false : "wrong token kind: " + kind; //$NON-NLS-1$
|
default: assert false : "wrong token kind: " + kind; //$NON-NLS-1$
|
||||||
case TK_const: declarator.setConst(true); break;
|
case TK_const: declarator.setConst(true); break;
|
||||||
|
@ -1713,8 +1725,8 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
||||||
if(TRACE_AST_STACK) System.out.println(astStack);
|
if(TRACE_AST_STACK) System.out.println(astStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int getTemplateParameterType(IToken token) {
|
private int getTemplateParameterType(IToken token) {
|
||||||
int kind = token.getKind();
|
int kind = baseKind(token);
|
||||||
switch(kind) {
|
switch(kind) {
|
||||||
default: assert false : "wrong token kind: " + kind; //$NON-NLS-1$
|
default: assert false : "wrong token kind: " + kind; //$NON-NLS-1$
|
||||||
case TK_class: return ICPPASTSimpleTypeTemplateParameter.st_class;
|
case TK_class: return ICPPASTSimpleTypeTemplateParameter.st_class;
|
||||||
|
|
Loading…
Add table
Reference in a new issue