From 06841d979370b2c2937c1fd5596ea6bd18938b2d Mon Sep 17 00:00:00 2001 From: Mike Kucera Date: Thu, 4 Jun 2009 15:23:16 +0000 Subject: [PATCH] [278797] CASTIdExpression getExpressionType() doesn't support enumerations --- .../cdt/core/parser/tests/ast2/AST2Tests.java | 14 ++++++++++++++ .../core/dom/parser/c/CASTIdExpression.java | 8 ++++++++ 2 files changed, 22 insertions(+) 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(); }