From bac604f82e54690bb0b3aadb0c6ab9185b9f1cf8 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Thu, 10 Apr 2008 12:27:51 +0000 Subject: [PATCH] Differentiating typeid-nodes from typeof-nodes. --- .../core/dom/ast/IASTTypeIdExpression.java | 30 +++++++++++++++---- .../dom/ast/cpp/ICPPASTTypeIdExpression.java | 13 +++++--- .../dom/ast/gnu/IGNUASTTypeIdExpression.java | 15 +++++----- .../rewrite/astwriter/ExpressionWriter.java | 28 +++++++---------- 4 files changed, 51 insertions(+), 35 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTTypeIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTTypeIdExpression.java index 773d97af27c..2401e0fc5bf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTTypeIdExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTTypeIdExpression.java @@ -1,12 +1,13 @@ /******************************************************************************* - * Copyright (c) 2005 IBM Corporation and others. + * Copyright (c) 2005, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * IBM Rational Software - Initial API and implementation + * IBM Rational Software - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.core.dom.ast; @@ -21,9 +22,28 @@ public interface IASTTypeIdExpression extends IASTExpression { public static final int op_sizeof = 0; /** - * op_last defined for sub-interfaces to extend. + * For c++, only. */ - public static final int op_last = op_sizeof; + public static final int op_typeid = 1; + + /** + * For gnu-parsers, only. + * op_alignOf is used for __alignOf( typeId ) type expressions. + */ + public static final int op_alignof = 2; + + /** + * For gnu-parsers, only. + * op_typeof is used for typeof( typeId ) type expressions. + */ + public static final int op_typeof = 3; + + /** + * @deprecated constants should be declared here, to avoid using the same constant in different + * interfaces. + */ + @Deprecated + public static final int op_last = op_alignof; /** * Get the operator for the expression. @@ -52,8 +72,6 @@ public interface IASTTypeIdExpression extends IASTExpression { /** * Get the type Id. - * - * @return */ public IASTTypeId getTypeId(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTTypeIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTTypeIdExpression.java index 1e8e12560b9..d4f2a5a7472 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTTypeIdExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTTypeIdExpression.java @@ -1,12 +1,13 @@ /******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. + * Copyright (c) 2004, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * IBM - Initial API and implementation + * IBM - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.core.dom.ast.cpp; @@ -17,7 +18,11 @@ import org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression; */ public interface ICPPASTTypeIdExpression extends IASTTypeIdExpression { - public static final int op_typeid = IASTTypeIdExpression.op_last + 1; + public static final int op_typeid = IASTTypeIdExpression.op_typeid; - public static final int op_last = op_typeid; + /** + * @deprecated all constants should be declared in {@link IASTTypeIdExpression} + */ + @Deprecated + public static final int op_last = IASTTypeIdExpression.op_last; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/IGNUASTTypeIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/IGNUASTTypeIdExpression.java index 7661cd0a0e1..6fd689c21c6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/IGNUASTTypeIdExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/IGNUASTTypeIdExpression.java @@ -1,12 +1,13 @@ /******************************************************************************* - * Copyright (c) 2005 IBM Corporation and others. + * Copyright (c) 2005, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * IBM Rational Software - Initial API and implementation + * IBM Rational Software - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.core.dom.ast.gnu; @@ -23,17 +24,17 @@ public interface IGNUASTTypeIdExpression extends IASTTypeIdExpression { /** * op_typeof is used for typeof( typeId ) type expressions. */ - public static final int op_typeof = IASTTypeIdExpression.op_last + 1; + public static final int op_typeof = IASTTypeIdExpression.op_typeof; /** * op_alignOf is used for __alignOf( typeId ) type * expressions. */ - public static final int op_alignof = IASTTypeIdExpression.op_last + 2; + public static final int op_alignof = IASTTypeIdExpression.op_alignof; /** - * op_last is available for sub-interfaces. + * @deprecated all constants must be declared in {@link IASTTypeIdExpression} */ - public static final int op_last = op_alignof; - + @Deprecated + public static final int op_last = IASTTypeIdExpression.op_last; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java index a94d431d54f..b0638bbb40d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java @@ -568,24 +568,16 @@ public class ExpressionWriter extends NodeWriter{ } private String getTypeIdExp(IASTTypeIdExpression typeIdExp) { - int type = typeIdExp.getOperator(); - if (type <= IASTTypeIdExpression.op_last) { - if(type == IASTTypeIdExpression.op_sizeof) { - return SIZEOF_OP + "("; //$NON-NLS-1$ - } - }else { - if (typeIdExp instanceof ICPPASTTypeIdExpression) { - if(type == ICPPASTTypeIdExpression.op_typeid) { - return TYPEID_OP; - } - }else if (typeIdExp instanceof IGNUASTTypeIdExpression) { - switch (type) {//TODO HSR Emanuel: check if there can't be GNUTypeIdExpressions here, see #162470 - case IGNUASTTypeIdExpression.op_alignof: - return ALIGNOF_OP + "("; //$NON-NLS-1$ - case IGNUASTTypeIdExpression.op_typeof: - return TYPEOF_OP; - } - } + final int type = typeIdExp.getOperator(); + switch(type) { + case IASTTypeIdExpression.op_sizeof: + return SIZEOF_OP + "("; //$NON-NLS-1$ + case ICPPASTTypeIdExpression.op_typeid: + return TYPEID_OP; + case IGNUASTTypeIdExpression.op_alignof: + return ALIGNOF_OP + "("; //$NON-NLS-1$ + case IGNUASTTypeIdExpression.op_typeof: + return TYPEOF_OP; } throw new IllegalArgumentException("Unknown TypeId Type"); //$NON-NLS-1$ }