1
0
Fork 0
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:
Markus Schorn 2008-04-10 15:17:12 +00:00
parent 68059d3675
commit 3a72e413b2
4 changed files with 109 additions and 148 deletions

View file

@ -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.

View file

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

View file

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

View file

@ -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) {