From a65769ef8a2d061e23943a119d6ef9b44b0f2c30 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Fri, 8 Apr 2005 15:08:30 +0000 Subject: [PATCH] Infrastructure to help fix all the ambiguity bugs. --- .../parser/AbstractGNUSourceCodeParser.java | 10 ++++-- .../core/dom/parser/IASTAmbiguity.java | 17 ++++++++++ .../dom/parser/IASTDeclarationAmbiguity.java | 31 +++++++++++++++++++ .../dom/parser/c/CASTBaseDeclSpecifier.java | 2 +- .../internal/core/dom/parser/c/CASTNode.java | 9 +++--- .../core/dom/parser/c/CASTPointer.java | 5 +++ .../core/dom/parser/c/CASTProblemOwner.java | 2 +- .../core/dom/parser/c/GNUCSourceParser.java | 5 +++ .../parser/cpp/CPPASTBaseDeclSpecifier.java | 2 +- .../core/dom/parser/cpp/CPPASTNode.java | 6 +--- .../core/dom/parser/cpp/CPPASTPointer.java | 21 ++++++++++--- .../dom/parser/cpp/CPPASTProblemOwner.java | 2 +- .../parser/cpp/CPPASTReferenceOperator.java | 7 ++++- .../dom/parser/cpp/CPPASTVisibilityLabel.java | 4 +++ .../dom/parser/cpp/GNUCPPSourceParser.java | 5 +++ 15 files changed, 106 insertions(+), 22 deletions(-) create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IASTAmbiguity.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IASTDeclarationAmbiguity.java diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java index 3480c4f8203..7089bbbd3bc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java @@ -383,18 +383,22 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { public IASTTranslationUnit parse() { long startTime = System.currentTimeMillis(); translationUnit(); - // For the debuglog to take place, you have to call - // Util.setDebugging(true); - // Or set debug to true in the core plugin preference log.traceLog("Parse " //$NON-NLS-1$ + (++parseCount) + ": " //$NON-NLS-1$ + (System.currentTimeMillis() - startTime) + "ms" //$NON-NLS-1$ + (parsePassed ? "" : " - parse failure")); //$NON-NLS-1$ //$NON-NLS-2$ + startTime = System.currentTimeMillis(); + resolveAmbiguities(); + log.traceLog("Ambiguity resolution : " //$NON-NLS-1$ + + (System.currentTimeMillis() - startTime) + "ms" //$NON-NLS-1$ + ); //$NON-NLS-1$ //$NON-NLS-2$ IASTTranslationUnit result = getTranslationUnit(); nullifyTranslationUnit(); return result; } + protected abstract void resolveAmbiguities(); + /** * */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IASTAmbiguity.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IASTAmbiguity.java new file mode 100644 index 00000000000..76f88ecbe99 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IASTAmbiguity.java @@ -0,0 +1,17 @@ +/********************************************************************** + * Copyright (c) 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 - Initial API and implementation + **********************************************************************/ +package org.eclipse.cdt.internal.core.dom.parser; + +import org.eclipse.cdt.core.dom.ast.IASTNode; + +public interface IASTAmbiguity extends IASTNode { + +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IASTDeclarationAmbiguity.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IASTDeclarationAmbiguity.java new file mode 100644 index 00000000000..3dd48cbe918 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IASTDeclarationAmbiguity.java @@ -0,0 +1,31 @@ +/********************************************************************** + * Copyright (c) 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 - Initial API and implementation + **********************************************************************/ +package org.eclipse.cdt.internal.core.dom.parser; + +import org.eclipse.cdt.core.dom.ast.IASTDeclaration; + +/** + * @author jcamelon + */ +public interface IASTDeclarationAmbiguity extends IASTDeclaration, + IASTAmbiguity { + + /** + * @param decl + */ + public void addDeclaration( IASTDeclaration decl ); + + /** + * @return + */ + public IASTDeclaration [] getDeclarations(); + +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBaseDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBaseDeclSpecifier.java index 551bc30904f..862d510bd9f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBaseDeclSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBaseDeclSpecifier.java @@ -15,7 +15,7 @@ import org.eclipse.cdt.core.dom.ast.c.ICASTDeclSpecifier; /** * @author jcamelon */ -public class CASTBaseDeclSpecifier extends CASTNode implements ICASTDeclSpecifier { +public abstract class CASTBaseDeclSpecifier extends CASTNode implements ICASTDeclSpecifier { protected int storageClass; protected boolean isConst; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTNode.java index 9c0b907a5b9..85664111559 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTNode.java @@ -10,7 +10,6 @@ package org.eclipse.cdt.internal.core.dom.parser.c; import org.eclipse.cdt.core.dom.ast.ASTNodeProperty; -import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; @@ -18,7 +17,7 @@ import org.eclipse.cdt.internal.core.dom.parser.ASTNode; /** * @author jcamelon */ -public class CASTNode extends ASTNode implements IASTNode { +public abstract class CASTNode extends ASTNode implements IASTNode { private IASTNode parent; private ASTNodeProperty property; @@ -63,7 +62,7 @@ public class CASTNode extends ASTNode implements IASTNode { return (IASTTranslationUnit) node; } - public boolean accept( ASTVisitor action ){ - return true; - } +// public boolean accept( ASTVisitor action ){ +// return true; +// } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTPointer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTPointer.java index 87fa890e15e..5d12af55a9f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTPointer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTPointer.java @@ -9,6 +9,7 @@ * IBM Rational Software - Initial API and implementation */ package org.eclipse.cdt.internal.core.dom.parser.c; +import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.c.ICASTPointer; /** @@ -62,4 +63,8 @@ public class CASTPointer extends CASTNode implements ICASTPointer { isVolatile = value; } + public boolean accept(ASTVisitor visitor) { + return true; + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTProblemOwner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTProblemOwner.java index 0be81e75b97..50c7d434bea 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTProblemOwner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTProblemOwner.java @@ -15,7 +15,7 @@ import org.eclipse.cdt.core.dom.ast.IASTProblem; /** * @author jcamelon */ -class CASTProblemOwner extends CASTNode { +abstract class CASTProblemOwner extends CASTNode { private IASTProblem problem; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java index 5aa42d79156..14c291a1298 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java @@ -2600,4 +2600,9 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { return nc.result; } + protected void resolveAmbiguities() { + // TODO Auto-generated method stub + + } + } \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBaseDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBaseDeclSpecifier.java index 406a885adac..2a0a760c4ac 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBaseDeclSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTBaseDeclSpecifier.java @@ -15,7 +15,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier; /** * @author jcamelon */ -public class CPPASTBaseDeclSpecifier extends CPPASTNode implements +public abstract class CPPASTBaseDeclSpecifier extends CPPASTNode implements ICPPASTDeclSpecifier { private boolean friend; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNode.java index 74d44d54a76..0c151c262fa 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTNode.java @@ -11,7 +11,6 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.ASTNodeProperty; -import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; @@ -19,7 +18,7 @@ import org.eclipse.cdt.internal.core.dom.parser.ASTNode; /** * @author jcamelon */ -public class CPPASTNode extends ASTNode implements IASTNode { +public abstract class CPPASTNode extends ASTNode implements IASTNode { private IASTNode parent; private ASTNodeProperty property; @@ -64,7 +63,4 @@ public class CPPASTNode extends ASTNode implements IASTNode { this.property = property; } - public boolean accept( ASTVisitor action ){ - return true; - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java index 13edc105ef1..e2466e9cc63 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java @@ -10,6 +10,7 @@ **********************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; +import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTPointer; /** @@ -18,34 +19,46 @@ import org.eclipse.cdt.core.dom.ast.IASTPointer; public class CPPASTPointer extends CPPASTNode implements IASTPointer { private boolean isConst; + private boolean isVolatile; - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.core.dom.ast.IASTPointer#isConst() */ public boolean isConst() { return isConst; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.core.dom.ast.IASTPointer#isVolatile() */ public boolean isVolatile() { return isVolatile; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.core.dom.ast.IASTPointer#setConst(boolean) */ public void setConst(boolean value) { isConst = value; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.core.dom.ast.IASTPointer#setVolatile(boolean) */ public void setVolatile(boolean value) { isVolatile = value; } + public boolean accept(ASTVisitor action) { + return true; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemOwner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemOwner.java index f0544152785..f257555cf98 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemOwner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTProblemOwner.java @@ -15,7 +15,7 @@ import org.eclipse.cdt.core.dom.ast.IASTProblem; /** * @author jcamelon */ -class CPPASTProblemOwner extends CPPASTNode { +abstract class CPPASTProblemOwner extends CPPASTNode { private IASTProblem problem; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTReferenceOperator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTReferenceOperator.java index 3b8e68a1414..e42e59538df 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTReferenceOperator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTReferenceOperator.java @@ -10,6 +10,7 @@ **********************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; +import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTReferenceOperator; /** @@ -17,5 +18,9 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTReferenceOperator; */ public class CPPASTReferenceOperator extends CPPASTNode implements ICPPASTReferenceOperator { - + + public boolean accept( ASTVisitor action ){ + return true; + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTVisibilityLabel.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTVisibilityLabel.java index d37cf192534..2454c3090f9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTVisibilityLabel.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTVisibilityLabel.java @@ -10,6 +10,7 @@ **********************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; +import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTVisiblityLabel; /** @@ -34,4 +35,7 @@ public class CPPASTVisibilityLabel extends CPPASTNode implements this.visibility = visibility; } + public boolean accept( ASTVisitor action ){ + return true; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 5e709f744b6..e81e3259c35 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -5070,4 +5070,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { return visitor.found; } + protected void resolveAmbiguities() { + // TODO Auto-generated method stub + + } + } \ No newline at end of file