Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Schorn2009-04-28 11:53:37 +0000
committerMarkus Schorn2009-04-28 11:53:37 +0000
commit1e31821df493d0cf7727febf0e58858c0ec43b74 (patch)
treead67242bbe86b461b1791d65a3367eaafd9872ba
parent71638ab566810d7f6ffd32efaa3e1548a14730ee (diff)
downloadorg.eclipse.cdt-1e31821df493d0cf7727febf0e58858c0ec43b74.tar.gz
org.eclipse.cdt-1e31821df493d0cf7727febf0e58858c0ec43b74.tar.xz
org.eclipse.cdt-1e31821df493d0cf7727febf0e58858c0ec43b74.zip
Fixes CArrayType.getArraySizeExpression(), bug 273797.
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java21
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICNodeFactory.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayModifier.java66
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTModifiedArrayModifier.java91
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CArrayType.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CNodeFactory.java7
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java22
-rw-r--r--lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java2
9 files changed, 92 insertions, 123 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 d9e3ca824cd..a283325e29f 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
@@ -6279,4 +6279,25 @@ public class AST2Tests extends AST2BaseTest {
public void testPredefinedMacroNamesC() throws Exception {
parseAndCheckBindings(getAboveComment(), ParserLanguage.C);
}
+
+ //
+ // int MyGlobal[10];
+ //
+ public void testBug273797() throws Exception {
+ IASTTranslationUnit tu = parseAndCheckBindings(getAboveComment(), ParserLanguage.C);
+ IASTName n = ((IASTSimpleDeclaration)tu.getDeclarations()[0]).getDeclarators()[0].getName();
+ IVariable v = (IVariable) n.resolveBinding();
+
+ ICArrayType t = (ICArrayType)v.getType();
+ assertFalse(t.isConst());
+ assertFalse(t.isRestrict());
+ assertFalse(t.isVolatile());
+ assertFalse(t.isVariableLength());
+ assertFalse(t.isStatic());
+
+ IASTExpression e = t.getArraySizeExpression();
+ assertNotNull(e);
+ assertTrue(e instanceof IASTLiteralExpression);
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICNodeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICNodeFactory.java
index 0559869132a..18bba753564 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICNodeFactory.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICNodeFactory.java
@@ -43,7 +43,7 @@ public interface ICNodeFactory extends INodeFactory {
public ICASTCompositeTypeSpecifier newCompositeTypeSpecifier(int key, IASTName name);
- public ICASTArrayModifier newModifiedArrayModifier(IASTExpression expr);
+ public ICASTArrayModifier newArrayModifier(IASTExpression expr);
public ICASTTypeIdInitializerExpression newTypeIdInitializerExpression(IASTTypeId typeId, IASTInitializer initializer);
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayModifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayModifier.java
index b30a9b0deb4..9cf39e3bae6 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayModifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTArrayModifier.java
@@ -1,30 +1,34 @@
/*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * IBM Rational Software - Initial API and implementation
+ * John Camelon (IBM Rational Software) - Initial API and implementation
* Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.c;
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
-import org.eclipse.cdt.core.dom.ast.IASTArrayModifier;
import org.eclipse.cdt.core.dom.ast.IASTExpression;
import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.c.ICASTArrayModifier;
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent;
/**
- * @author jcamelon
+ * c-specific modifier for array specifiers.
*/
-public class CASTArrayModifier extends ASTNode implements IASTArrayModifier, IASTAmbiguityParent {
+public class CASTArrayModifier extends ASTNode implements ICASTArrayModifier, IASTAmbiguityParent {
private IASTExpression exp;
-
+ private boolean isVolatile;
+ private boolean isRestrict;
+ private boolean isStatic;
+ private boolean isConst;
+ private boolean isVarSized;
public CASTArrayModifier() {
}
@@ -36,6 +40,11 @@ public class CASTArrayModifier extends ASTNode implements IASTArrayModifier, IAS
public CASTArrayModifier copy() {
CASTArrayModifier copy = new CASTArrayModifier(exp == null ? null : exp.copy());
copy.setOffsetAndLength(this);
+ copy.isVolatile = isVolatile;
+ copy.isRestrict = isRestrict;
+ copy.isStatic = isStatic;
+ copy.isConst = isConst;
+ copy.isVarSized = isVarSized;
return copy;
}
@@ -51,6 +60,51 @@ public class CASTArrayModifier extends ASTNode implements IASTArrayModifier, IAS
expression.setPropertyInParent(CONSTANT_EXPRESSION);
}
}
+
+ public boolean isConst() {
+ return isConst;
+ }
+
+ public boolean isStatic() {
+ return isStatic;
+ }
+
+ public boolean isRestrict() {
+ return isRestrict;
+ }
+
+ public boolean isVolatile() {
+ return isVolatile;
+ }
+
+ public void setConst(boolean value) {
+ assertNotFrozen();
+ this.isConst = value;
+ }
+
+ public void setVolatile(boolean value) {
+ assertNotFrozen();
+ this.isVolatile = value;
+ }
+
+ public void setRestrict(boolean value) {
+ assertNotFrozen();
+ this.isRestrict = value;
+ }
+
+ public void setStatic(boolean value) {
+ assertNotFrozen();
+ this.isStatic = value;
+ }
+
+ public boolean isVariableSized() {
+ return isVarSized;
+ }
+
+ public void setVariableSized(boolean value) {
+ assertNotFrozen();
+ isVarSized = value;
+ }
@Override
public boolean accept(ASTVisitor action) {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTModifiedArrayModifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTModifiedArrayModifier.java
deleted file mode 100644
index a9aeac10b3c..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTModifiedArrayModifier.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Rational Software - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.internal.core.dom.parser.c;
-
-import org.eclipse.cdt.core.dom.ast.IASTExpression;
-import org.eclipse.cdt.core.dom.ast.c.ICASTArrayModifier;
-
-/**
- * @author jcamelon
- */
-public class CASTModifiedArrayModifier extends CASTArrayModifier implements ICASTArrayModifier {
-
- private boolean isVolatile;
- private boolean isRestrict;
- private boolean isStatic;
- private boolean isConst;
- private boolean varSized;
-
- public CASTModifiedArrayModifier() {
- }
-
- public CASTModifiedArrayModifier(IASTExpression exp) {
- super(exp);
- }
-
- @Override
- public CASTModifiedArrayModifier copy() {
- IASTExpression exp = getConstantExpression();
- CASTModifiedArrayModifier copy = new CASTModifiedArrayModifier(exp == null ? null : exp.copy());
- copy.isVolatile = isVolatile;
- copy.isRestrict = isRestrict;
- copy.isStatic = isStatic;
- copy.isConst = isConst;
- copy.varSized = varSized;
- copy.setOffsetAndLength(this);
- return copy;
- }
-
- public boolean isConst() {
- return isConst;
- }
-
- public boolean isStatic() {
- return isStatic;
- }
-
- public boolean isRestrict() {
- return isRestrict;
- }
-
- public boolean isVolatile() {
- return isVolatile;
- }
-
- public void setConst(boolean value) {
- assertNotFrozen();
- this.isConst = value;
- }
-
- public void setVolatile(boolean value) {
- assertNotFrozen();
- this.isVolatile = value;
- }
-
- public void setRestrict(boolean value) {
- assertNotFrozen();
- this.isRestrict = value;
- }
-
- public void setStatic(boolean value) {
- assertNotFrozen();
- this.isStatic = value;
- }
-
- public boolean isVariableSized() {
- return varSized;
- }
-
- public void setVariableSized(boolean value) {
- assertNotFrozen();
- varSized = value;
- }
-} \ No newline at end of file
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CArrayType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CArrayType.java
index 1a1781e5239..05f0460b732 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CArrayType.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CArrayType.java
@@ -69,7 +69,7 @@ public class CArrayType implements ICArrayType, ITypeContainer {
this.type = t;
}
- public void setModifiedArrayModifier(ICASTArrayModifier mod) {
+ public void setModifier(ICASTArrayModifier mod) {
this.mod = mod;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CNodeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CNodeFactory.java
index ac45942f1e7..d9a2d4552fd 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CNodeFactory.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CNodeFactory.java
@@ -12,7 +12,6 @@ package org.eclipse.cdt.internal.core.dom.parser.c;
import org.eclipse.cdt.core.dom.ast.IASTASMDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator;
-import org.eclipse.cdt.core.dom.ast.IASTArrayModifier;
import org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression;
import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression;
import org.eclipse.cdt.core.dom.ast.IASTBreakStatement;
@@ -172,14 +171,10 @@ public class CNodeFactory implements ICNodeFactory {
return new CASTArrayDeclarator(name);
}
- public IASTArrayModifier newArrayModifier(IASTExpression expr) {
+ public ICASTArrayModifier newArrayModifier(IASTExpression expr) {
return new CASTArrayModifier(expr);
}
- public ICASTArrayModifier newModifiedArrayModifier(IASTExpression expr) {
- return new CASTModifiedArrayModifier(expr);
- }
-
public IASTStandardFunctionDeclarator newFunctionDeclarator(IASTName name) {
return new CASTFunctionDeclarator(name);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java
index 62ff9e25614..ace1ed4d200 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java
@@ -1437,7 +1437,7 @@ public class CVisitor extends ASTQueries {
for (IASTArrayModifier mod : mods) {
CArrayType arrayType = new CArrayType(lastType);
if (mod instanceof ICASTArrayModifier) {
- arrayType.setModifiedArrayModifier((ICASTArrayModifier)mod);
+ arrayType.setModifier((ICASTArrayModifier)mod);
}
lastType= arrayType;
}
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 272aab7ea82..e1c916342dc 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
@@ -1711,23 +1711,13 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
throw backtrack;
}
-
- IASTArrayModifier arrayMod;
- if (!(isStatic || isRestrict || isConst || isVolatile || isVarSized))
- arrayMod = nodeFactory.newArrayModifier(null);
- else {
- ICASTArrayModifier temp = nodeFactory.newModifiedArrayModifier(null);
- temp.setStatic(isStatic);
- temp.setConst(isConst);
- temp.setVolatile(isVolatile);
- temp.setRestrict(isRestrict);
- temp.setVariableSized(isVarSized);
- arrayMod = temp;
- }
+ ICASTArrayModifier arrayMod = nodeFactory.newArrayModifier(exp);
+ arrayMod.setStatic(isStatic);
+ arrayMod.setConst(isConst);
+ arrayMod.setVolatile(isVolatile);
+ arrayMod.setRestrict(isRestrict);
+ arrayMod.setVariableSized(isVarSized);
((ASTNode) arrayMod).setOffsetAndLength(startOffset, lastOffset - startOffset);
- if (exp != null) {
- arrayMod.setConstantExpression(exp);
- }
arrayMods.add(arrayMod);
}
}
diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java
index fd1e80f73aa..a562bfe49b8 100644
--- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java
+++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java
@@ -234,7 +234,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
boolean isVarSized, boolean hasTypeQualifierList, boolean hasAssignmentExpr) {
assert isStatic || isVarSized || hasTypeQualifierList;
- ICASTArrayModifier arrayModifier = nodeFactory.newModifiedArrayModifier(null);
+ ICASTArrayModifier arrayModifier = nodeFactory.newArrayModifier(null);
// consume all the stuff between the square brackets into an array modifier
arrayModifier.setStatic(isStatic);

Back to the top