mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-31 12:55:40 +02:00
Differentiating typeid-nodes from typeof-nodes for unary expressions, bug 162470.
This commit is contained in:
parent
68059d3675
commit
3a72e413b2
4 changed files with 109 additions and 148 deletions
|
@ -90,9 +90,33 @@ public interface IASTUnaryExpression extends IASTExpression {
|
||||||
public static final int op_bracketedPrimary = 11;
|
public static final int op_bracketedPrimary = 11;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>op_last</code> is made available for subclasses.
|
* for c++, only. <code>op_throw</code> throw exp
|
||||||
*/
|
*/
|
||||||
public static final int op_last = op_bracketedPrimary;
|
public static final int op_throw = 12;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* for c++, only. <code>op_typeid</code> = typeid( exp )
|
||||||
|
*/
|
||||||
|
public static final int op_typeid = 13;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* for gnu parsers, only. <code>op_typeof</code> is used for typeof( unaryExpression ) type
|
||||||
|
* expressions.
|
||||||
|
*/
|
||||||
|
public static final int op_typeof = 14;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* for gnu parsers, only. <code>op_alignOf</code> is used for __alignOf( unaryExpression ) type
|
||||||
|
* expressions.
|
||||||
|
*/
|
||||||
|
public static final int op_alignOf = 15;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code>op_last</code> is made available for subclasses.
|
||||||
|
* @deprecated all constants must be defined in this interface
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public static final int op_last = op_alignOf;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the operator/kind.
|
* Get the operator/kind.
|
||||||
|
|
|
@ -20,16 +20,16 @@ public interface ICPPASTUnaryExpression extends IASTUnaryExpression {
|
||||||
/**
|
/**
|
||||||
* <code>op_throw</code> throw exp
|
* <code>op_throw</code> throw exp
|
||||||
*/
|
*/
|
||||||
public static final int op_throw = IASTUnaryExpression.op_last + 1;
|
public static final int op_throw = IASTUnaryExpression.op_throw;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>op_typeid</code> = typeid( exp )
|
* <code>op_typeid</code> = typeid( exp )
|
||||||
*/
|
*/
|
||||||
public static final int op_typeid = IASTUnaryExpression.op_last + 2;
|
public static final int op_typeid = IASTUnaryExpression.op_typeid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>op_last</code> is provided for subinterfaces.
|
* @deprecated all constants to be defined in {@link IASTUnaryExpression}
|
||||||
*/
|
*/
|
||||||
public static final int op_last = op_typeid;
|
@Deprecated
|
||||||
|
public static final int op_last = IASTUnaryExpression.op_last;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,16 +24,17 @@ public interface IGNUASTUnaryExpression extends IASTUnaryExpression {
|
||||||
* <code>op_typeof</code> is used for typeof( unaryExpression ) type
|
* <code>op_typeof</code> is used for typeof( unaryExpression ) type
|
||||||
* expressions.
|
* expressions.
|
||||||
*/
|
*/
|
||||||
public static final int op_typeof = IASTUnaryExpression.op_last + 1;
|
public static final int op_typeof = IASTUnaryExpression.op_typeof;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>op_alignOf</code> is used for __alignOf( unaryExpression ) type
|
* <code>op_alignOf</code> is used for __alignOf( unaryExpression ) type
|
||||||
* expressions.
|
* expressions.
|
||||||
*/
|
*/
|
||||||
public static final int op_alignOf = IASTUnaryExpression.op_last + 2;
|
public static final int op_alignOf = IASTUnaryExpression.op_alignOf;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <code>op_last</code> is available for sub-interfaces.
|
* @deprecated all constants to be defined in {@link IASTUnaryExpression}.
|
||||||
*/
|
*/
|
||||||
public static final int op_last = op_alignOf;
|
@Deprecated
|
||||||
|
public static final int op_last = IASTUnaryExpression.op_last;
|
||||||
}
|
}
|
||||||
|
|
|
@ -231,163 +231,99 @@ public class ExpressionWriter extends NodeWriter{
|
||||||
|
|
||||||
private boolean isPrefixExpression(IASTUnaryExpression unExp) {
|
private boolean isPrefixExpression(IASTUnaryExpression unExp) {
|
||||||
int unaryExpressionType = unExp.getOperator();
|
int unaryExpressionType = unExp.getOperator();
|
||||||
if (unaryExpressionType <= IASTUnaryExpression.op_last) {
|
|
||||||
|
|
||||||
switch (unaryExpressionType) {
|
switch (unaryExpressionType) {
|
||||||
case IASTUnaryExpression.op_prefixDecr:
|
case IASTUnaryExpression.op_prefixDecr:
|
||||||
case IASTUnaryExpression.op_prefixIncr:
|
case IASTUnaryExpression.op_prefixIncr:
|
||||||
case IASTUnaryExpression.op_plus:
|
case IASTUnaryExpression.op_plus:
|
||||||
case IASTUnaryExpression.op_minus:
|
case IASTUnaryExpression.op_minus:
|
||||||
case IASTUnaryExpression.op_star:
|
case IASTUnaryExpression.op_star:
|
||||||
case IASTUnaryExpression.op_amper:
|
case IASTUnaryExpression.op_amper:
|
||||||
case IASTUnaryExpression.op_tilde:
|
case IASTUnaryExpression.op_tilde:
|
||||||
case IASTUnaryExpression.op_not:
|
case IASTUnaryExpression.op_not:
|
||||||
case IASTUnaryExpression.op_sizeof:
|
case IASTUnaryExpression.op_sizeof:
|
||||||
case IASTUnaryExpression.op_bracketedPrimary:
|
case IASTUnaryExpression.op_bracketedPrimary:
|
||||||
|
case ICPPASTUnaryExpression.op_throw:
|
||||||
|
case ICPPASTUnaryExpression.op_typeid:
|
||||||
|
case IGNUASTUnaryExpression.op_alignOf:
|
||||||
|
case IGNUASTUnaryExpression.op_typeof:
|
||||||
|
return true;
|
||||||
|
|
||||||
return true;
|
default:
|
||||||
|
return false;
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (unExp instanceof ICPPASTUnaryExpression) {
|
|
||||||
switch (unaryExpressionType) {
|
|
||||||
case ICPPASTUnaryExpression.op_throw:
|
|
||||||
case ICPPASTUnaryExpression.op_typeid:
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}else if (unExp instanceof IGNUASTUnaryExpression) {
|
|
||||||
switch (unaryExpressionType) {
|
|
||||||
case IGNUASTUnaryExpression.op_alignOf:
|
|
||||||
case IGNUASTUnaryExpression.op_typeof:
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isPostfixExpression(IASTUnaryExpression unExp) {
|
private boolean isPostfixExpression(IASTUnaryExpression unExp) {
|
||||||
int unaryExpressionType = unExp.getOperator();
|
int unaryExpressionType = unExp.getOperator();
|
||||||
if (unaryExpressionType <= IASTUnaryExpression.op_last) {
|
switch (unaryExpressionType) {
|
||||||
switch (unaryExpressionType) {
|
case IASTUnaryExpression.op_postFixDecr:
|
||||||
case IASTUnaryExpression.op_postFixDecr:
|
case IASTUnaryExpression.op_postFixIncr:
|
||||||
case IASTUnaryExpression.op_postFixIncr:
|
case IASTUnaryExpression.op_bracketedPrimary:
|
||||||
case IASTUnaryExpression.op_bracketedPrimary:
|
case ICPPASTUnaryExpression.op_typeid:
|
||||||
|
case IGNUASTUnaryExpression.op_alignOf:
|
||||||
|
case IGNUASTUnaryExpression.op_typeof:
|
||||||
|
return true;
|
||||||
|
|
||||||
return true;
|
default:
|
||||||
|
return false;
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (unExp instanceof ICPPASTUnaryExpression) {
|
|
||||||
return unaryExpressionType == ICPPASTUnaryExpression.op_typeid;
|
|
||||||
}else if (unExp instanceof IGNUASTUnaryExpression) {
|
|
||||||
switch (unaryExpressionType) {
|
|
||||||
case IGNUASTUnaryExpression.op_alignOf:
|
|
||||||
case IGNUASTUnaryExpression.op_typeof:
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getPrefixOperator(IASTUnaryExpression unExp) {
|
private String getPrefixOperator(IASTUnaryExpression unExp) {
|
||||||
int unaryExpressionType = unExp.getOperator();
|
int unaryExpressionType = unExp.getOperator();
|
||||||
if (unaryExpressionType <= IASTUnaryExpression.op_last) {
|
switch (unaryExpressionType) {
|
||||||
switch (unaryExpressionType) {
|
case IASTUnaryExpression.op_prefixDecr:
|
||||||
case IASTUnaryExpression.op_prefixDecr:
|
return DECREMENT_OP;
|
||||||
return DECREMENT_OP;
|
case IASTUnaryExpression.op_prefixIncr:
|
||||||
case IASTUnaryExpression.op_prefixIncr:
|
return INCREMENT_OP;
|
||||||
return INCREMENT_OP;
|
case IASTUnaryExpression.op_plus:
|
||||||
case IASTUnaryExpression.op_plus:
|
return UNARY_PLUS_OP;
|
||||||
return UNARY_PLUS_OP;
|
case IASTUnaryExpression.op_minus:
|
||||||
case IASTUnaryExpression.op_minus:
|
return UNARY_MINUS_OP;
|
||||||
return UNARY_MINUS_OP;
|
case IASTUnaryExpression.op_star:
|
||||||
case IASTUnaryExpression.op_star:
|
return STAR_OP;
|
||||||
return STAR_OP;
|
case IASTUnaryExpression.op_amper:
|
||||||
case IASTUnaryExpression.op_amper:
|
return AMPERSAND_OP;
|
||||||
return AMPERSAND_OP;
|
case IASTUnaryExpression.op_tilde:
|
||||||
case IASTUnaryExpression.op_tilde:
|
return TILDE_OP;
|
||||||
return TILDE_OP;
|
case IASTUnaryExpression.op_not:
|
||||||
case IASTUnaryExpression.op_not:
|
return NOT_OP;
|
||||||
return NOT_OP;
|
case IASTUnaryExpression.op_sizeof:
|
||||||
case IASTUnaryExpression.op_sizeof:
|
return SIZEOF_OP;
|
||||||
return SIZEOF_OP;
|
case IASTUnaryExpression.op_bracketedPrimary:
|
||||||
case IASTUnaryExpression.op_bracketedPrimary:
|
return OPEN_BRACKET_OP;
|
||||||
return OPEN_BRACKET_OP;
|
case ICPPASTUnaryExpression.op_throw:
|
||||||
default:
|
return THROW;
|
||||||
System.err.println("Unkwown unaryExpressionType: " + unaryExpressionType); //$NON-NLS-1$
|
case ICPPASTUnaryExpression.op_typeid:
|
||||||
throw new IllegalArgumentException("Unkwown unaryExpressionType: " + unaryExpressionType); //$NON-NLS-1$
|
return TYPEID_OP;
|
||||||
}
|
case IGNUASTUnaryExpression.op_alignOf:
|
||||||
}
|
return ALIGNOF_OP;
|
||||||
if (unExp instanceof ICPPASTUnaryExpression) {
|
case IGNUASTUnaryExpression.op_typeof:
|
||||||
switch (unaryExpressionType) {
|
return TYPEOF_OP;
|
||||||
case ICPPASTUnaryExpression.op_throw:
|
default:
|
||||||
return THROW;
|
System.err.println("Unkwown unaryExpressionType: " + unaryExpressionType); //$NON-NLS-1$
|
||||||
case ICPPASTUnaryExpression.op_typeid:
|
|
||||||
return TYPEID_OP;
|
|
||||||
default:
|
|
||||||
System.err.println("Unkwown unaryExpressionType: " + unaryExpressionType); //$NON-NLS-1$
|
|
||||||
throw new IllegalArgumentException("Unkwown unaryExpressionType: " + unaryExpressionType); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
}else if (unExp instanceof IGNUASTUnaryExpression) {
|
|
||||||
switch (unaryExpressionType) {
|
|
||||||
case IGNUASTUnaryExpression.op_alignOf:
|
|
||||||
return ALIGNOF_OP;
|
|
||||||
case IGNUASTUnaryExpression.op_typeof:
|
|
||||||
return TYPEOF_OP;
|
|
||||||
default:
|
|
||||||
System.err.println("Unkwown unaryExpressionType: " + unaryExpressionType); //$NON-NLS-1$
|
|
||||||
throw new IllegalArgumentException("Unkwown unaryExpressionType: " + unaryExpressionType); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
}
|
|
||||||
System.err.println("Unkwown unaryExpressionType: " + unaryExpressionType); //$NON-NLS-1$
|
|
||||||
throw new IllegalArgumentException("Unkwown unaryExpressionType: " + unaryExpressionType); //$NON-NLS-1$
|
throw new IllegalArgumentException("Unkwown unaryExpressionType: " + unaryExpressionType); //$NON-NLS-1$
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getPostfixOperator(IASTUnaryExpression unExp) {
|
private String getPostfixOperator(IASTUnaryExpression unExp) {
|
||||||
int unaryExpressionType = unExp.getOperator();
|
int unaryExpressionType = unExp.getOperator();
|
||||||
if (unaryExpressionType <= IASTUnaryExpression.op_last) {
|
switch (unaryExpressionType) {
|
||||||
switch (unaryExpressionType) {
|
case IASTUnaryExpression.op_postFixDecr:
|
||||||
case IASTUnaryExpression.op_postFixDecr:
|
return DECREMENT_OP;
|
||||||
return DECREMENT_OP;
|
case IASTUnaryExpression.op_postFixIncr:
|
||||||
case IASTUnaryExpression.op_postFixIncr:
|
return INCREMENT_OP;
|
||||||
return INCREMENT_OP;
|
case ICPPASTUnaryExpression.op_typeid:
|
||||||
case IASTUnaryExpression.op_bracketedPrimary:
|
return CLOSING_BRACKET_OP;
|
||||||
return CLOSING_BRACKET_OP;
|
case IASTUnaryExpression.op_bracketedPrimary:
|
||||||
default:
|
case IGNUASTUnaryExpression.op_alignOf:
|
||||||
System.err.println("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$
|
case IGNUASTUnaryExpression.op_typeof:
|
||||||
|
return CLOSING_BRACKET_OP;
|
||||||
|
default:
|
||||||
|
System.err.println("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$
|
||||||
throw new IllegalArgumentException("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$
|
throw new IllegalArgumentException("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (unExp instanceof ICPPASTUnaryExpression) {
|
|
||||||
switch (unaryExpressionType) {
|
|
||||||
case ICPPASTUnaryExpression.op_typeid:
|
|
||||||
return CLOSING_BRACKET_OP;
|
|
||||||
default:
|
|
||||||
System.err.println("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$
|
|
||||||
throw new IllegalArgumentException("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
}else if (unExp instanceof IGNUASTUnaryExpression) {
|
|
||||||
switch (unaryExpressionType) {
|
|
||||||
case IGNUASTUnaryExpression.op_alignOf:
|
|
||||||
case IGNUASTUnaryExpression.op_typeof:
|
|
||||||
return CLOSING_BRACKET_OP;
|
|
||||||
default:
|
|
||||||
System.err.println("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$
|
|
||||||
throw new IllegalArgumentException("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
}
|
|
||||||
System.err.println("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$
|
|
||||||
throw new IllegalArgumentException("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeBinaryExpression(IASTBinaryExpression binExp) {
|
private void writeBinaryExpression(IASTBinaryExpression binExp) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue