diff options
author | Markus Schorn | 2010-10-13 07:48:39 +0000 |
---|---|---|
committer | Markus Schorn | 2010-10-13 07:48:39 +0000 |
commit | 67f123cf5e5ab67611ec962324cdff94dba8e1b3 (patch) | |
tree | 68cdc1afffb7db828765f53508cc54f59393188f /core/org.eclipse.cdt.core/parser/org/eclipse/cdt | |
parent | 6174986b48b3a26c0ebd65c92670b697d872976d (diff) | |
download | org.eclipse.cdt-67f123cf5e5ab67611ec962324cdff94dba8e1b3.tar.gz org.eclipse.cdt-67f123cf5e5ab67611ec962324cdff94dba8e1b3.tar.xz org.eclipse.cdt-67f123cf5e5ab67611ec962324cdff94dba8e1b3.zip |
Bug 327328: Push concept of restrict up to IASTPointer and IPointerType.
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt')
27 files changed, 131 insertions, 363 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTSignatureUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTSignatureUtil.java index 3baa34a5e76..8456fe8b57b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTSignatureUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTSignatureUtil.java @@ -17,7 +17,6 @@ import org.eclipse.cdt.core.dom.ast.c.ICASTArrayModifier; import org.eclipse.cdt.core.dom.ast.c.ICASTDesignatedInitializer; import org.eclipse.cdt.core.dom.ast.c.ICASTDesignator; import org.eclipse.cdt.core.dom.ast.c.ICASTFieldDesignator; -import org.eclipse.cdt.core.dom.ast.c.ICASTPointer; import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTTypeIdInitializerExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCastExpression; @@ -34,7 +33,6 @@ import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTTypeIdExpression; import org.eclipse.cdt.core.dom.ast.gnu.c.ICASTKnRFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.gnu.c.IGCCASTArrayRangeDesignator; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer; import org.eclipse.cdt.core.parser.Keywords; import org.eclipse.cdt.internal.core.dom.parser.ASTProblem; import org.eclipse.cdt.internal.core.model.ASTStringUtil; @@ -188,47 +186,28 @@ public class ASTSignatureUtil { result.append(SPACE); } if (op instanceof IASTPointer) { + final IASTPointer ptr = (IASTPointer) op; result.append(Keywords.cpSTAR); // want to have this before keywords on the pointer needSpace = true; - } - - if (op instanceof IGPPASTPointer) { - if (((IGPPASTPointer) op).isRestrict()) { + if (ptr.isConst()) { if (needSpace) { result.append(SPACE); - needSpace = false; } - result.append(Keywords.RESTRICT); - needSpace = true; - } - } - - if (op instanceof ICASTPointer) { - if (((ICASTPointer) op).isRestrict()) { - if (needSpace) { - result.append(SPACE); - needSpace = false; - } - result.append(Keywords.RESTRICT); + result.append(Keywords.CONST); needSpace = true; } - } - - if (op instanceof IASTPointer) { - if (((IASTPointer) op).isConst()) { - if (needSpace) { + if (ptr.isVolatile()) { + if (needSpace) { result.append(SPACE); - needSpace = false; } - result.append(Keywords.CONST); + result.append(Keywords.VOLATILE); needSpace = true; } - if (((IASTPointer) op).isVolatile()) { - if (needSpace) { + if (ptr.isRestrict()) { + if (needSpace) { result.append(SPACE); - needSpace = false; } - result.append(Keywords.VOLATILE); + result.append(Keywords.RESTRICT); needSpace = true; } } @@ -236,7 +215,6 @@ public class ASTSignatureUtil { if (op instanceof ICPPASTReferenceOperator) { if (needSpace) { result.append(SPACE); - needSpace = false; } result.append(Keywords.cpAMPER); needSpace = true; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTPointer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTPointer.java index 62b41ebb1ae..ab15838439e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTPointer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTPointer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2009 IBM Corporation and others. + * Copyright (c) 2004, 2010 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 @@ -18,41 +18,40 @@ package org.eclipse.cdt.core.dom.ast; */ public interface IASTPointer extends IASTPointerOperator { - // Qualifiers applied to the pointer type /** - * Is this a const pointer? - * - * @return boolean + * Returns whether the pointer is const qualified. */ public boolean isConst(); /** - * Is this a volatile pointer? - * - * @return boolean + * Returns whether the pointer is volatile qualified. */ public boolean isVolatile(); /** - * Set this to be a const pointer (true/false). - * - * @param value - - * the value + * Returns whether the pointer is restrict qualified. + * @since 5.3 + */ + public boolean isRestrict(); + + /** + * Not allowed on frozen ast. */ public void setConst(boolean value); /** - * Set this to be a volatile pointer (true/false). - * - * @param value - - * the value + * Not allowed on frozen ast. */ public void setVolatile(boolean value); + /** + * Not allowed on frozen ast. + * @since 5.3 + */ + public void setRestrict(boolean value); /** * @since 5.1 */ public IASTPointer copy(); - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IPointerType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IPointerType.java index ad312577755..9aff9d85908 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IPointerType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IPointerType.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2009 IBM Corporation and others. + * Copyright (c) 2004, 2010 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 @@ -7,6 +7,7 @@ * * Contributors: * Andrew Niefer (IBM Corporation) - initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.core.dom.ast; @@ -21,12 +22,20 @@ public interface IPointerType extends IType { public IType getType(); /** - * is this a const pointer + * Returns whether the pointer is const qualified. */ public boolean isConst(); /** - * is this a volatile pointer + * Returns whether the pointer is volatile qualified. */ public boolean isVolatile(); + + /** + * Returns whether the pointer is qualified to be restrict. + * For c++ this is a gnu-extension. + * @since 5.3 + */ + boolean isRestrict(); + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICASTPointer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICASTPointer.java index 28c61b11777..d2a9588bb49 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICASTPointer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICASTPointer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2009 IBM Corporation and others. + * Copyright (c) 2005, 2010 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 @@ -7,6 +7,7 @@ * * Contributors: * John Camelon (IBM Rational Software) - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.core.dom.ast.c; @@ -21,22 +22,7 @@ import org.eclipse.cdt.core.dom.ast.IASTPointer; public interface ICASTPointer extends IASTPointer { /** - * Is this a restrict pointer? - * - * @return isRestrict boolean - */ - boolean isRestrict(); - - /** - * Set this pointer to be restrict pointer. - * - * @param value - */ - void setRestrict(boolean value); - - /** * @since 5.1 */ public ICASTPointer copy(); - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java index 1901bee166a..fa0854703bd 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java @@ -26,8 +26,6 @@ import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.INodeFactory; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointerToMember; import org.eclipse.cdt.core.parser.IScanner; /** @@ -198,11 +196,19 @@ public interface ICPPNodeFactory extends INodeFactory { public ICPPASTParameterDeclaration newParameterDeclaration(IASTDeclSpecifier declSpec, IASTDeclarator declarator); - public IGPPASTPointer newPointerGPP(); + /** + * @deprecated Replaced by {@link #newPointer()}. + */ + @Deprecated + public org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer newPointerGPP(); public ICPPASTPointerToMember newPointerToMember(IASTName name); - public IGPPASTPointerToMember newPointerToMemberGPP(IASTName name); + /** + * @deprecated Replaced by {@link #newPointerToMember(IASTName)}. + */ + @Deprecated + public org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointerToMember newPointerToMemberGPP(IASTName name); public IASTProblemTypeId newProblemTypeId(IASTProblem problem); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/IGPPASTPointer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/IGPPASTPointer.java index 28a506ddebc..a3920683fc6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/IGPPASTPointer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/IGPPASTPointer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2009 IBM Corporation and others. + * Copyright (c) 2004, 2010 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 @@ -13,29 +13,12 @@ package org.eclipse.cdt.core.dom.ast.gnu.cpp; import org.eclipse.cdt.core.dom.ast.IASTPointer; /** - * g++ allows for restrict pointers. - * - * @noextend This interface is not intended to be extended by clients. - * @noimplement This interface is not intended to be implemented by clients. + * @deprecated Use {@link IASTPointer}, instead. */ +@Deprecated public interface IGPPASTPointer extends IASTPointer { /** - * Is this pointer a restrict pointer? - * - * @return boolean - */ - public boolean isRestrict(); - - /** - * Set restrict-keyword-encountered to true or false. - * - * @param value - * boolean - */ - public void setRestrict(boolean value); - - /** * @since 5.1 */ public IGPPASTPointer copy(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/IGPPASTPointerToMember.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/IGPPASTPointerToMember.java index 381b29cd819..18e97ab3af0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/IGPPASTPointerToMember.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/IGPPASTPointerToMember.java @@ -13,11 +13,9 @@ package org.eclipse.cdt.core.dom.ast.gnu.cpp; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTPointerToMember; /** - * G++ Pointer 2 Members accept the restrict qualified as well. - * - * @noextend This interface is not intended to be extended by clients. - * @noimplement This interface is not intended to be implemented by clients. + * @deprecated Use {@link ICPPASTPointerToMember}, instead. */ +@Deprecated public interface IGPPASTPointerToMember extends IGPPASTPointer, ICPPASTPointerToMember { /** diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java index a284afe48ad..f920d7a594b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java @@ -42,7 +42,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPImplicitFunction; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPImplicitTypedef; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPQualifierType; -import org.eclipse.cdt.internal.core.dom.parser.cpp.GPPPointerType; /** * This is the IBuiltinBindingsProvider used to implement the "Other" built-in GCC symbols defined: @@ -323,9 +322,9 @@ public class GCCBuiltinSymbolProvider implements IBuiltinBindingsProvider { cpp_unspecified = new CPPBasicType(Kind.eUnspecified, 0); cpp_char = new CPPBasicType(Kind.eChar, 0); cpp_char_p = new CPPPointerType(cpp_char); - cpp_char_p_r = new GPPPointerType(cpp_char, false, false, true); + cpp_char_p_r = new CPPPointerType(cpp_char, false, false, true); cpp_const_char_p = new CPPPointerType(new CPPQualifierType(cpp_char, true, false)); - cpp_const_char_p_r = new GPPPointerType(new CPPQualifierType(cpp_char, true, false), false, false, true); + cpp_const_char_p_r = new CPPPointerType(new CPPQualifierType(cpp_char, true, false), false, false, true); cpp_double = new CPPBasicType(Kind.eDouble, 0); cpp_double_complex = new CPPBasicType(Kind.eDouble, IBasicType.IS_COMPLEX, null); @@ -350,9 +349,9 @@ public class GCCBuiltinSymbolProvider implements IBuiltinBindingsProvider { cpp_void = new CPPBasicType(Kind.eVoid, 0); cpp_void_p = new CPPPointerType(cpp_void); - cpp_void_p_r = new GPPPointerType(cpp_void, false, false, true); + cpp_void_p_r = new CPPPointerType(cpp_void, false, false, true); cpp_const_void_p = new CPPPointerType(new CPPQualifierType(cpp_void, true, false)); - cpp_const_void_p_r = new GPPPointerType(new CPPQualifierType(cpp_void, true, false), false, false, true); + cpp_const_void_p_r = new CPPPointerType(new CPPQualifierType(cpp_void, true, false), false, false, true); cpp_FILE_p_r = cpp_void_p_r; // implemented as void* restrict } 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 9940be4e3fd..7b3ed009b83 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 @@ -22,6 +22,7 @@ public class CPPASTPointer extends ASTNode implements IASTPointer { private boolean isConst; private boolean isVolatile; + private boolean isRestrict; public CPPASTPointer() { } @@ -30,6 +31,7 @@ public class CPPASTPointer extends ASTNode implements IASTPointer { CPPASTPointer copy = new CPPASTPointer(); copy.isConst = isConst; copy.isVolatile = isVolatile; + copy.isRestrict = isRestrict; copy.setOffsetAndLength(this); return copy; } @@ -42,6 +44,10 @@ public class CPPASTPointer extends ASTNode implements IASTPointer { return isVolatile; } + public boolean isRestrict() { + return isRestrict; + } + public void setConst(boolean value) { assertNotFrozen(); isConst = value; @@ -52,6 +58,11 @@ public class CPPASTPointer extends ASTNode implements IASTPointer { isVolatile = value; } + public void setRestrict(boolean value) { + assertNotFrozen(); + isRestrict = value; + } + @Override public boolean accept(ASTVisitor action) { if (action.shouldVisitPointerOperators) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointerToMember.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointerToMember.java index d4449526822..8b4b82e0258 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointerToMember.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointerToMember.java @@ -31,6 +31,7 @@ public class CPPASTPointerToMember extends CPPASTPointer implements ICPPASTPoint CPPASTPointerToMember copy = new CPPASTPointerToMember(n == null ? null : n.copy()); copy.setConst(isConst()); copy.setVolatile(isVolatile()); + copy.setRestrict(isRestrict()); copy.setOffsetAndLength(this); return copy; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTranslationUnit.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTranslationUnit.java index 57dd28b9016..6291fe59b90 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTranslationUnit.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTranslationUnit.java @@ -63,7 +63,7 @@ public class CPPASTTranslationUnit extends ASTTranslationUnit implements ICPPAST // void IType cpp_void = new CPPBasicType(Kind.eVoid, 0); // void * - IType cpp_void_p = new GPPPointerType(new CPPQualifierType(new CPPBasicType(Kind.eVoid, 0), false, false), new GPPASTPointer()); + IType cpp_void_p = new CPPPointerType(new CPPQualifierType(new CPPBasicType(Kind.eVoid, 0), false, false), new CPPASTPointer()); // size_t // assumed: unsigned long int IType cpp_size_t = new CPPBasicType(Kind.eInt, IBasicType.IS_LONG & IBasicType.IS_UNSIGNED); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java index 1c17763d15d..67b47ac0748 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java @@ -196,7 +196,7 @@ public class CPPASTUnaryExpression extends ASTNode implements ICPPASTUnaryExpres if (!member.isStatic()) { // so if the member is static it will fall through overload= null; if (!inParenthesis) { - return new CPPPointerToMemberType(member.getType(), member.getClassOwner(), false, false); + return new CPPPointerToMemberType(member.getType(), member.getClassOwner(), false, false, false); } else if (member instanceof IFunction) { return new ProblemBinding(operand, IProblemBinding.SEMANTIC_INVALID_TYPE, operand.getRawSignature().toCharArray()); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java index 88226c2ed51..cc70d0aab07 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java @@ -107,8 +107,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTVisibilityLabel; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTWhileStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNodeFactory; import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointerToMember; import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.internal.core.dom.parser.NodeFactory; import org.eclipse.cdt.internal.core.parser.scanner.CPreprocessor; @@ -422,7 +420,8 @@ public class CPPNodeFactory extends NodeFactory implements ICPPNodeFactory { return new CPPASTPointer(); } - public IGPPASTPointer newPointerGPP() { + @Deprecated + public org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer newPointerGPP() { return new GPPASTPointer(); } @@ -430,7 +429,8 @@ public class CPPNodeFactory extends NodeFactory implements ICPPNodeFactory { return new CPPASTPointerToMember(name); } - public IGPPASTPointerToMember newPointerToMemberGPP(IASTName name) { + @Deprecated + public org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointerToMember newPointerToMemberGPP(IASTName name) { return new GPPASTPointerToMember(name); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerToMemberType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerToMemberType.java index 85470c4eb5b..a89e4b4c3d5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerToMemberType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerToMemberType.java @@ -39,8 +39,8 @@ public class CPPPointerToMemberType extends CPPPointerType implements ICPPPointe this.operator = operator; } - public CPPPointerToMemberType(IType type, IType thisType, boolean isConst, boolean isVolatile) { - super(type, isConst, isVolatile); + public CPPPointerToMemberType(IType type, IType thisType, boolean isConst, boolean isVolatile, boolean isRestrict) { + super(type, isConst, isVolatile, isRestrict); this.classType = thisType; } @@ -99,6 +99,7 @@ public class CPPPointerToMemberType extends CPPPointerType implements ICPPPointe int firstByte= ITypeMarshalBuffer.POINTER_TO_MEMBER; if (isConst()) firstByte |= ITypeMarshalBuffer.FLAG1; if (isVolatile()) firstByte |= ITypeMarshalBuffer.FLAG2; + if (isRestrict()) firstByte |= ITypeMarshalBuffer.FLAG3; buffer.putByte((byte) firstByte); buffer.marshalType(getType()); buffer.marshalType(getMemberOfClass()); @@ -108,6 +109,7 @@ public class CPPPointerToMemberType extends CPPPointerType implements ICPPPointe IType nested= buffer.unmarshalType(); IType memberOf= buffer.unmarshalType(); return new CPPPointerToMemberType(nested, memberOf, (firstByte & ITypeMarshalBuffer.FLAG1) != 0, - (firstByte & ITypeMarshalBuffer.FLAG2) != 0); + (firstByte & ITypeMarshalBuffer.FLAG2) != 0, + (firstByte & ITypeMarshalBuffer.FLAG3) != 0); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java index c071b65d785..9f19571a555 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java @@ -26,34 +26,26 @@ import org.eclipse.core.runtime.CoreException; * Pointers in c++ */ public class CPPPointerType implements IPointerType, ITypeContainer, ISerializableType { - protected IType type = null; - private boolean isConst = false; - private boolean isVolatile = false; + protected IType type; + private boolean isConst; + private boolean isVolatile; + private boolean isRestrict; - public CPPPointerType(IType type, boolean isConst, boolean isVolatile) { + public CPPPointerType(IType type, boolean isConst, boolean isVolatile, boolean isRestrict) { this.isConst = isConst; this.isVolatile = isVolatile; + this.isRestrict = isRestrict; setType(type); } public CPPPointerType(IType type, IASTPointer operator) { - this(type, operator.isConst(), operator.isVolatile()); + this(type, operator.isConst(), operator.isVolatile(), operator.isRestrict()); } public CPPPointerType(IType type) { - this(type, false, false); + this(type, false, false, false); } - public IType stripQualifiers() { - CPPPointerType result = this; - if (isConst || isVolatile) { - result = (CPPPointerType) clone(); - result.isConst = false; - result.isVolatile = false; - } - return result; - } - public boolean isSameType(IType o) { if (o == this) return true; @@ -70,7 +62,7 @@ public class CPPPointerType implements IPointerType, ITypeContainer, ISerializab return false; IPointerType pt = (IPointerType) o; - if (isConst == pt.isConst() && isVolatile == pt.isVolatile()) { + if (isConst == pt.isConst() && isVolatile == pt.isVolatile() && isRestrict == pt.isRestrict()) { return type.isSameType(pt.getType()); } return false; @@ -92,7 +84,11 @@ public class CPPPointerType implements IPointerType, ITypeContainer, ISerializab public boolean isVolatile() { return isVolatile; } - + + public boolean isRestrict() { + return isRestrict; + } + @Override public Object clone() { IType t = null; @@ -113,6 +109,7 @@ public class CPPPointerType implements IPointerType, ITypeContainer, ISerializab int firstByte= ITypeMarshalBuffer.POINTER; if (isConst()) firstByte |= ITypeMarshalBuffer.FLAG1; if (isVolatile()) firstByte |= ITypeMarshalBuffer.FLAG2; + if (isRestrict()) firstByte |= ITypeMarshalBuffer.FLAG3; buffer.putByte((byte) firstByte); final IType nestedType = getType(); buffer.marshalType(nestedType); @@ -121,6 +118,7 @@ public class CPPPointerType implements IPointerType, ITypeContainer, ISerializab public static IType unmarshal(int firstByte, ITypeMarshalBuffer buffer) throws CoreException { IType nested= buffer.unmarshalType(); return new CPPPointerType(nested, (firstByte & ITypeMarshalBuffer.FLAG1) != 0, - (firstByte & ITypeMarshalBuffer.FLAG2) != 0); + (firstByte & ITypeMarshalBuffer.FLAG2) != 0, + (firstByte & ITypeMarshalBuffer.FLAG3) != 0); } } 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 178beed0936..8fa51bea463 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 @@ -115,8 +115,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDirective; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTVisibilityLabel; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNodeFactory; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointerToMember; import org.eclipse.cdt.core.dom.parser.IExtensionToken; import org.eclipse.cdt.core.dom.parser.cpp.ICPPParserExtensionConfiguration; import org.eclipse.cdt.core.index.IIndex; @@ -3393,24 +3391,13 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { IASTPointer pointer; if (name != null) { - if (isRestrict) { - IGPPASTPointerToMember gppp2m = nodeFactory.newPointerToMemberGPP(name); - gppp2m.setRestrict(true); - pointer= gppp2m; - } else { - pointer= nodeFactory.newPointerToMember(name); - } + pointer= nodeFactory.newPointerToMember(name); } else { - if (isRestrict) { - IGPPASTPointer gpppo = nodeFactory.newPointerGPP(); - gpppo.setRestrict(true); - pointer= gpppo; - } else { - pointer = nodeFactory.newPointer(); - } + pointer = nodeFactory.newPointer(); } pointer.setConst(isConst); pointer.setVolatile(isVolatile); + pointer.setRestrict(isRestrict); setRange(pointer, startOffset, endOffset); if (result == null) { result= new ArrayList<IASTPointerOperator>(4); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointer.java index 1768cb9484d..5da19619047 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointer.java @@ -13,28 +13,18 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer; /** - * @author jcamelon + * @deprecated */ +@Deprecated public class GPPASTPointer extends CPPASTPointer implements IGPPASTPointer { - private boolean isRestrict; - @Override public GPPASTPointer copy() { GPPASTPointer copy = new GPPASTPointer(); copy.setConst(isConst()); copy.setVolatile(isVolatile()); - copy.setRestrict(isRestrict); + copy.setRestrict(isRestrict()); copy.setOffsetAndLength(this); return copy; } - - public boolean isRestrict() { - return isRestrict; - } - - public void setRestrict(boolean value) { - isRestrict = value; - } - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointerToMember.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointerToMember.java index eaa4e1672e3..c5abacbf81a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointerToMember.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointerToMember.java @@ -14,8 +14,9 @@ import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointerToMember; /** - * @author jcamelon + * @deprecated */ +@Deprecated public class GPPASTPointerToMember extends CPPASTPointerToMember implements IGPPASTPointerToMember { @@ -27,31 +28,14 @@ public class GPPASTPointerToMember extends CPPASTPointerToMember implements super(n); } - private boolean isRestrict; - @Override public GPPASTPointerToMember copy() { IASTName name = getName(); GPPASTPointerToMember copy = new GPPASTPointerToMember(name == null ? null : name.copy()); copy.setConst(isConst()); copy.setVolatile(isVolatile()); - copy.setRestrict(isRestrict); + copy.setRestrict(isRestrict()); copy.setOffsetAndLength(this); return copy; } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer#isRestrict() - */ - public boolean isRestrict() { - return isRestrict; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer#setRestrict(boolean) - */ - public void setRestrict(boolean value) { - isRestrict = value; - } - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerToMemberType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerToMemberType.java deleted file mode 100644 index f8a45daf94f..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerToMemberType.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 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: - * Andrew Niefer (IBM Corporation) - initial API and implementation - * Markus Schorn (Wind River Systems) - *******************************************************************************/ -package org.eclipse.cdt.internal.core.dom.parser.cpp; - -import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.core.dom.ast.ITypedef; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointerToMember; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPPointerToMemberType; - -public class GPPPointerToMemberType extends CPPPointerToMemberType implements IGPPPointerToMemberType { - private boolean isRestrict; - - public GPPPointerToMemberType(IType type, IGPPASTPointerToMember operator) { - super(type, operator); - this.isRestrict = operator.isRestrict(); - } - - @Override - public IType stripQualifiers() { - GPPPointerToMemberType result = (GPPPointerToMemberType) super.stripQualifiers(); - - if (isRestrict) { - if (result == this) { - result = (GPPPointerToMemberType) clone(); - result.isRestrict = false; - } else { - result.isRestrict = false; - } - } - return result; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPPointerType#isRestrict() - */ - public boolean isRestrict() { - return isRestrict; - } - - @Override - public boolean isSameType(IType o) { - if (o == this) { - return true; - } - if (o instanceof ITypedef) { - return o.isSameType(this); - } - - if (!super.isSameType(o)) - return false; - if (o instanceof IGPPPointerToMemberType) { - return (isRestrict == ((IGPPPointerToMemberType) o).isRestrict()); - } - return (isRestrict == false); - } -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerType.java deleted file mode 100644 index e1f17743707..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerType.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 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: - * Andrew Niefer (IBM Corporation) - initial API and implementation - * Markus Schorn (Wind River Systems) - *******************************************************************************/ -package org.eclipse.cdt.internal.core.dom.parser.cpp; - -import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.core.dom.ast.ITypedef; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPPointerType; - -public class GPPPointerType extends CPPPointerType implements IGPPPointerType { - private boolean isRestrict = false; - - public GPPPointerType( IType type, IGPPASTPointer operator ) { - super( type, operator ); - isRestrict = operator.isRestrict(); - } - - public GPPPointerType( IType type ){ - super( type ); - } - - public GPPPointerType( IType type, boolean isConst, boolean isVolatile, boolean isRestrict ) { - super( type, isConst, isVolatile ); - this.isRestrict = isRestrict; - } - - @Override - public IType stripQualifiers(){ - GPPPointerType result = (GPPPointerType) super.stripQualifiers(); - - if( isRestrict ){ - if( result == this ){ - result = (GPPPointerType) clone(); - result.isRestrict = false; - } else { - result.isRestrict = false; - } - } - return result; - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer#isRestrict() - */ - public boolean isRestrict() { - return isRestrict; - - } - - @Override - public boolean isSameType(IType o) { - if (o == this) { - return true; - } - if (o instanceof ITypedef) { - return o.isSameType(this); - } - - if (!super.isSameType(o)) - return false; - - if (o instanceof IGPPPointerType) { - return (isRestrict == ((IGPPPointerType) o).isRestrict()); - } - return (isRestrict == false); - } -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java index 4b98262bf5e..e4859c9e437 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java @@ -1115,7 +1115,7 @@ public class CPPTemplates { } if (newNestedType != nestedType || newMemberOfClass != memberOfClass) { return new CPPPointerToMemberType(newNestedType, newMemberOfClass, - ptm.isConst(), ptm.isVolatile()); + ptm.isConst(), ptm.isVolatile(), ptm.isRestrict()); } return typeContainer; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index 09553a1018a..7d4e36bccb8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -143,8 +143,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointerToMember; import org.eclipse.cdt.core.index.IIndexBinding; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.core.parser.util.CharArrayUtils; @@ -182,8 +180,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateArgument; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateParameterMap; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTypedef; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVariable; -import org.eclipse.cdt.internal.core.dom.parser.cpp.GPPPointerToMemberType; -import org.eclipse.cdt.internal.core.dom.parser.cpp.GPPPointerType; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; import org.eclipse.cdt.internal.core.index.IIndexScope; @@ -1683,12 +1679,8 @@ public class CPPVisitor extends ASTQueries { private static IType getPointerTypes(IType type, IASTDeclarator declarator) { IASTPointerOperator[] ptrOps = declarator.getPointerOperators(); for (IASTPointerOperator ptrOp : ptrOps) { - if (ptrOp instanceof IGPPASTPointerToMember) { - type = new GPPPointerToMemberType(type, (IGPPASTPointerToMember) ptrOp); - } else if (ptrOp instanceof ICPPASTPointerToMember) { + if (ptrOp instanceof ICPPASTPointerToMember) { type = new CPPPointerToMemberType(type, (ICPPASTPointerToMember) ptrOp); - } else if (ptrOp instanceof IGPPASTPointer) { - type = new GPPPointerType(type, (IGPPASTPointer) ptrOp); } else if (ptrOp instanceof IASTPointer) { type = new CPPPointerType(type, (IASTPointer) ptrOp); } else if (ptrOp instanceof ICPPASTReferenceOperator) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java index 8fa0fc4f2f5..8c8c7ddc2b5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java @@ -869,7 +869,7 @@ public class Conversions { if (val instanceof IASTLiteralExpression) { IASTLiteralExpression lit= (IASTLiteralExpression) val; if (lit.getKind() == IASTLiteralExpression.lk_string_literal) { - source= new CPPPointerType(srcTarget, false, false); + source= new CPPPointerType(srcTarget, false, false, false); cost.setQualificationAdjustment((getCVQualifier(targetPtrTgt).isVolatile() ? 2 : 1) << 2); } } @@ -1137,7 +1137,7 @@ public class Conversions { cost.setRank(Rank.CONVERSION); cost.setInheritanceDistance(depth); cost.source = new CPPPointerToMemberType(spm.getType(), - tpm.getMemberOfClass(), spm.isConst(), spm.isVolatile()); + tpm.getMemberOfClass(), spm.isConst(), spm.isVolatile(), spm.isRestrict()); } return false; } @@ -1276,9 +1276,9 @@ public class Conversions { final boolean isVolatile) { if (p1 instanceof ICPPPointerToMemberType) { ICPPPointerToMemberType ptm= (ICPPPointerToMemberType) p1; - return new CPPPointerToMemberType(target, ptm.getMemberOfClass(), isConst, isVolatile); + return new CPPPointerToMemberType(target, ptm.getMemberOfClass(), isConst, isVolatile, false); } - return new CPPPointerType(target, isConst, isVolatile); + return new CPPPointerType(target, isConst, isVolatile, false); } private static boolean isNullPtr(IType t1) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java index b7f5f15d7da..6c934a77d94 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java @@ -241,18 +241,16 @@ public class SemanticUtil { if ((ptr && !isMbrPtr) || (mptr && isMbrPtr)) { t= ((IPointerType) type).getType(); } else if (allcvq) { - if (type instanceof CPPPointerType) { - return ((CPPPointerType) type).stripQualifiers(); - } - IPointerType p= (IPointerType) type; - if (p.isConst() || p.isVolatile()) { - if (p instanceof ICPPPointerToMemberType) { - final IType memberOfClass = ((ICPPPointerToMemberType) p).getMemberOfClass(); - return new CPPPointerToMemberType(p.getType(), memberOfClass, false, false); + IPointerType pt= (IPointerType) type; + if (pt.isConst() || pt.isVolatile() || pt.isRestrict()) { + if (pt instanceof ICPPPointerToMemberType) { + final IType memberOfClass = ((ICPPPointerToMemberType) pt).getMemberOfClass(); + return new CPPPointerToMemberType(pt.getType(), memberOfClass, false, false, false); } else { - return new CPPPointerType(p.getType(), false, false); + return new CPPPointerType(pt.getType(), false, false, false); } } + return pt; } } else if (tdef && type instanceof ITypedef) { t= ((ITypedef) type).getType(); @@ -469,13 +467,13 @@ public class SemanticUtil { ICPPPointerToMemberType pt= (ICPPPointerToMemberType) baseType; if ((cnst && !pt.isConst()) || (vol && !pt.isVolatile())) { return new CPPPointerToMemberType(pt.getType(), pt.getMemberOfClass(), cnst - || pt.isConst(), vol || pt.isVolatile()); + || pt.isConst(), vol || pt.isVolatile(), pt.isRestrict()); } return baseType; } else if (baseType instanceof IPointerType) { IPointerType pt= (IPointerType) baseType; if ((cnst && !pt.isConst()) || (vol && !pt.isVolatile())) { - return new CPPPointerType(pt.getType(), cnst || pt.isConst(), vol || pt.isVolatile()); + return new CPPPointerType(pt.getType(), cnst || pt.isConst(), vol || pt.isVolatile(), pt.isRestrict()); } return baseType; } else if (baseType instanceof IArrayType) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclaratorWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclaratorWriter.java index 3cef7d0691e..171f370ee43 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclaratorWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclaratorWriter.java @@ -12,6 +12,7 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.rewrite.astwriter; +import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator; import org.eclipse.cdt.core.dom.ast.IASTArrayModifier; import org.eclipse.cdt.core.dom.ast.IASTDeclaration; @@ -25,13 +26,10 @@ import org.eclipse.cdt.core.dom.ast.IASTPointer; import org.eclipse.cdt.core.dom.ast.IASTPointerOperator; import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IASTTypeId; -import org.eclipse.cdt.core.dom.ast.c.ICASTPointer; -import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTPointerToMember; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTReferenceOperator; import org.eclipse.cdt.core.dom.ast.gnu.c.ICASTKnRFunctionDeclarator; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer; import org.eclipse.cdt.internal.core.dom.rewrite.commenthandler.NodeCommentMap; @@ -52,7 +50,7 @@ public class DeclaratorWriter extends NodeWriter { private static final String STAR_SPACE = "* "; //$NON-NLS-1$ private static final String PURE_VIRTUAL = " =0"; //$NON-NLS-1$ - public DeclaratorWriter(Scribe scribe, CPPASTVisitor visitor, NodeCommentMap commentMap) { + public DeclaratorWriter(Scribe scribe, ASTVisitor visitor, NodeCommentMap commentMap) { super(scribe, visitor, commentMap); } @@ -176,22 +174,12 @@ public class DeclaratorWriter extends NodeWriter { if (operator.isConst()) { scribe.printStringSpace(CONST); - } if (operator.isVolatile()) { scribe.printStringSpace(VOLATILE); } - if (operator instanceof ICASTPointer) { - ICASTPointer cPoint = (ICASTPointer) operator; - if(cPoint.isRestrict()) { - scribe.print(RESTRICT); - } - } - if (operator instanceof IGPPASTPointer) { - IGPPASTPointer gppPoint = (IGPPASTPointer) operator; - if(gppPoint.isRestrict()) { - scribe.print(RESTRICT); - } + if (operator.isRestrict()) { + scribe.print(RESTRICT); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/NodeWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/NodeWriter.java index ecf21e1d30f..369fe35e39b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/NodeWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/NodeWriter.java @@ -11,9 +11,9 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.rewrite.astwriter; +import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTComment; import org.eclipse.cdt.core.dom.ast.IASTNode; -import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor; import org.eclipse.cdt.internal.core.dom.rewrite.commenthandler.NodeCommentMap; /** @@ -27,7 +27,7 @@ import org.eclipse.cdt.internal.core.dom.rewrite.commenthandler.NodeCommentMap; public class NodeWriter { protected Scribe scribe; - protected CPPASTVisitor visitor; + protected ASTVisitor visitor; protected NodeCommentMap commentMap; protected static final String COMMA_SPACE = ", "; //$NON-NLS-1$ protected static final String EQUALS = " = "; //$NON-NLS-1$ @@ -59,7 +59,7 @@ public class NodeWriter { protected static final String VAR_ARGS = "..."; //$NON-NLS-1$ protected static final String COLON_COLON = "::"; //$NON-NLS-1$ - public NodeWriter(Scribe scribe, CPPASTVisitor visitor, NodeCommentMap commentMap) { + public NodeWriter(Scribe scribe, ASTVisitor visitor, NodeCommentMap commentMap) { super(); this.scribe = scribe; this.visitor = visitor; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java index 5ec2429ffa8..4577d65b3d3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java @@ -146,7 +146,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { IType t= pmt.getType(); IType t2= getCompositeType(t); if (ct != ct2 || t != t2) { - return new CPPPointerToMemberType(t2, ct2, pmt.isConst(), pmt.isVolatile()); + return new CPPPointerToMemberType(t2, ct2, pmt.isConst(), pmt.isVolatile(), pmt.isRestrict()); } return pmt; } @@ -155,7 +155,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory { IType r= pt.getType(); IType r2= getCompositeType(r); if (r != r2) { - return new CPPPointerType(r2, pt.isConst(), pt.isVolatile()); + return new CPPPointerType(r2, pt.isConst(), pt.isVolatile(), pt.isRestrict()); } return pt; } |