1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-09 02:36:01 +02:00

Differentiating typeid-nodes from typeof-nodes.

This commit is contained in:
Markus Schorn 2008-04-10 12:27:51 +00:00
parent 3c104b3f4c
commit bac604f82e
4 changed files with 51 additions and 35 deletions

View file

@ -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;
/**
* <code>op_last</code> 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.
* <code>op_alignOf</code> is used for __alignOf( typeId ) type expressions.
*/
public static final int op_alignof = 2;
/**
* For gnu-parsers, only.
* <code>op_typeof</code> 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();

View file

@ -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;
}

View file

@ -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 {
/**
* <code>op_typeof</code> 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;
/**
* <code>op_alignOf</code> 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;
/**
* <code>op_last</code> 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;
}

View file

@ -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$
}