1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 14:12:10 +02:00

Bug 535331: Rewriting sizeof...() drops the parenthesis

Fix and test.

Change-Id: If54f24d833724f3c51ae0b6e7f325493e5110719
Signed-off-by: Hansruedi Patzen <hansruedi.patzen@hsr.ch>
Signed-off-by: Thomas Corbat <tcorbat@hsr.ch>
This commit is contained in:
Hansruedi Patzen 2018-05-30 13:23:56 +02:00 committed by Thomas Corbat
parent 3f98811f73
commit a9988957f6
4 changed files with 29 additions and 5 deletions

View file

@ -241,3 +241,12 @@ struct S
; ;
} }
}; };
//!Operator sizeofParameterPack
//%CPP
template<typename... T>
void f(T... a)
{
if (sizeof...(a)){
}
}

View file

@ -71,7 +71,7 @@ public class ExpressionWriter extends NodeWriter{
private static final String TYPEID_OP = "typeid ("; //$NON-NLS-1$ private static final String TYPEID_OP = "typeid ("; //$NON-NLS-1$
private static final String OPEN_BRACKET_OP = "("; //$NON-NLS-1$ private static final String OPEN_BRACKET_OP = "("; //$NON-NLS-1$
private static final String SIZEOF_OP = "sizeof "; //$NON-NLS-1$ private static final String SIZEOF_OP = "sizeof "; //$NON-NLS-1$
private static final String SIZEOF_PARAMETER_PACK_OP = "sizeof..."; //$NON-NLS-1$ private static final String SIZEOF_PARAMETER_PACK_OP = "sizeof...("; //$NON-NLS-1$
private static final String NOEXCEPT_OP = "noexcept ("; //$NON-NLS-1$ private static final String NOEXCEPT_OP = "noexcept ("; //$NON-NLS-1$
private static final String NOT_OP = "!"; //$NON-NLS-1$ private static final String NOT_OP = "!"; //$NON-NLS-1$
private static final String TILDE_OP = "~"; //$NON-NLS-1$ private static final String TILDE_OP = "~"; //$NON-NLS-1$
@ -274,6 +274,7 @@ public class ExpressionWriter extends NodeWriter{
case ICPPASTUnaryExpression.op_typeid: case ICPPASTUnaryExpression.op_typeid:
case ICPPASTUnaryExpression.op_noexcept: case ICPPASTUnaryExpression.op_noexcept:
case IASTUnaryExpression.op_alignOf: case IASTUnaryExpression.op_alignOf:
case IASTUnaryExpression.op_sizeofParameterPack:
return true; return true;
default: default:
@ -333,6 +334,7 @@ public class ExpressionWriter extends NodeWriter{
case ICPPASTUnaryExpression.op_noexcept: case ICPPASTUnaryExpression.op_noexcept:
case IASTUnaryExpression.op_bracketedPrimary: case IASTUnaryExpression.op_bracketedPrimary:
case IASTUnaryExpression.op_alignOf: case IASTUnaryExpression.op_alignOf:
case IASTUnaryExpression.op_sizeofParameterPack:
return CLOSING_BRACKET_OP; return CLOSING_BRACKET_OP;
default: default:
System.err.println("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$ System.err.println("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$
@ -519,7 +521,7 @@ public class ExpressionWriter extends NodeWriter{
case IASTTypeIdExpression.op_typeof: case IASTTypeIdExpression.op_typeof:
return TYPEOF_OP; return TYPEOF_OP;
case IASTTypeIdExpression.op_sizeofParameterPack: case IASTTypeIdExpression.op_sizeofParameterPack:
return SIZEOF_PARAMETER_PACK_OP + "("; //$NON-NLS-1$ return SIZEOF_PARAMETER_PACK_OP;
} }
throw new IllegalArgumentException("Unknown TypeId Type"); //$NON-NLS-1$ throw new IllegalArgumentException("Unknown TypeId Type"); //$NON-NLS-1$
} }

View file

@ -2669,9 +2669,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
case IASTUnaryExpression.op_sizeofParameterPack: case IASTUnaryExpression.op_sizeofParameterPack:
scribe.printNextToken(Token.t_sizeof, scribe.printComment()); scribe.printNextToken(Token.t_sizeof, scribe.printComment());
scribe.printNextToken(Token.tELIPSE, scribe.printComment()); scribe.printNextToken(Token.tELIPSE, scribe.printComment());
if (peekNextToken() != Token.tLPAREN) { scribe.printNextToken(Token.tLPAREN);
scribe.space();
}
operand.accept(this); operand.accept(this);
break; break;
case IASTUnaryExpression.op_throw: case IASTUnaryExpression.op_throw:

View file

@ -3405,4 +3405,19 @@ public class CodeFormatterTest extends BaseUITestCase {
public void testFormatAttributedLabelStatements_Bug535266() throws Exception { public void testFormatAttributedLabelStatements_Bug535266() throws Exception {
assertFormatterResult(); assertFormatterResult();
} }
//template<typename ... T>
//void f(T ... a) {
// if (sizeof...(a)) {
// }
//}
//template<typename ... T>
//void f(T ... a) {
// if (sizeof...(a)) {
// }
//}
public void testIndendtionSizeofParampack_535331() throws Exception {
assertFormatterResult();
}
} }