Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Schorn2010-10-13 07:48:39 +0000
committerMarkus Schorn2010-10-13 07:48:39 +0000
commit67f123cf5e5ab67611ec962324cdff94dba8e1b3 (patch)
tree68cdc1afffb7db828765f53508cc54f59393188f /core/org.eclipse.cdt.core/parser/org/eclipse/cdt
parent6174986b48b3a26c0ebd65c92670b697d872976d (diff)
downloadorg.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')
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTSignatureUtil.java40
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTPointer.java33
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IPointerType.java15
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/c/ICASTPointer.java18
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPNodeFactory.java14
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/IGPPASTPointer.java23
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/IGPPASTPointerToMember.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java9
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointer.java11
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTPointerToMember.java1
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTranslationUnit.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTUnaryExpression.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNodeFactory.java8
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerToMemberType.java8
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java36
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java19
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointer.java16
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPASTPointerToMember.java22
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerToMemberType.java65
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GPPPointerType.java76
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java2
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java10
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java8
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/SemanticUtil.java20
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclaratorWriter.java20
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/NodeWriter.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java4
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;
}

Back to the top