Skip to main content
summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMike Kucera2009-06-04 15:23:16 +0000
committerMike Kucera2009-06-04 15:23:16 +0000
commit06841d979370b2c2937c1fd5596ea6bd18938b2d (patch)
treeb52b73a0bdc006b1ec7d3dca10ca1d99da5fa331 /core
parente9154e34f0248d765286a1ed1037a781fca3dea9 (diff)
downloadorg.eclipse.cdt-06841d979370b2c2937c1fd5596ea6bd18938b2d.tar.gz
org.eclipse.cdt-06841d979370b2c2937c1fd5596ea6bd18938b2d.tar.xz
org.eclipse.cdt-06841d979370b2c2937c1fd5596ea6bd18938b2d.zip
[278797] CASTIdExpression getExpressionType() doesn't support enumerations
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java14
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java8
2 files changed, 22 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java
index a283325e29f..07d29079057 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java
@@ -6300,4 +6300,18 @@ public class AST2Tests extends AST2BaseTest {
assertTrue(e instanceof IASTLiteralExpression);
}
+ // enum myenum { value1, value2, value3 };
+ //
+ // void test() {
+ // (int) value1;
+ // }
+ public void testBug278797() throws Exception {
+ IASTTranslationUnit tu = parseAndCheckBindings(getAboveComment(), ParserLanguage.C);
+ IASTFunctionDefinition func = (IASTFunctionDefinition)tu.getDeclarations()[1];
+ IASTExpressionStatement stmt = ((IASTExpressionStatement)((IASTCompoundStatement)func.getBody()).getStatements()[0]);
+ IType t = ((IASTCastExpression)stmt.getExpression()).getOperand().getExpressionType();
+ assertNotNull(t);
+ assertTrue(t instanceof IEnumeration);
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java
index fa9054a7b59..35de0e98c54 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTIdExpression.java
@@ -21,7 +21,9 @@ import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.ICompositeType;
import org.eclipse.cdt.core.dom.ast.IEnumeration;
+import org.eclipse.cdt.core.dom.ast.IEnumerator;
import org.eclipse.cdt.core.dom.ast.IFunction;
+import org.eclipse.cdt.core.dom.ast.IProblemBinding;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.IVariable;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
@@ -97,6 +99,12 @@ public class CASTIdExpression extends ASTNode implements IASTIdExpression, IASTC
if (binding instanceof IFunction) {
return ((IFunction)binding).getType();
}
+ if (binding instanceof IEnumerator) {
+ return ((IEnumerator)binding).getType();
+ }
+ if (binding instanceof IProblemBinding) {
+ return (IProblemBinding)binding;
+ }
} catch (DOMException e) {
return e.getProblem();
}

Back to the top