Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHansruedi Patzen2018-05-30 11:23:56 +0000
committerThomas Corbat2018-06-15 06:53:27 +0000
commita9988957f653cf75d24b12180658f266d6dd9f16 (patch)
tree79679954f7557fa8c12d8c2a9313980e0c272db4
parent3f98811f7326e0eb94c745489985183e4bec2d7a (diff)
downloadorg.eclipse.cdt-a9988957f653cf75d24b12180658f266d6dd9f16.tar.gz
org.eclipse.cdt-a9988957f653cf75d24b12180658f266d6dd9f16.tar.xz
org.eclipse.cdt-a9988957f653cf75d24b12180658f266d6dd9f16.zip
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>
-rw-r--r--core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterExpressionTestSource.awts9
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java6
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java4
-rw-r--r--core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java15
4 files changed, 29 insertions, 5 deletions
diff --git a/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterExpressionTestSource.awts b/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterExpressionTestSource.awts
index 0ca5a850e6a..03e210bec9e 100644
--- a/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterExpressionTestSource.awts
+++ b/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterExpressionTestSource.awts
@@ -241,3 +241,12 @@ struct S
;
}
};
+
+//!Operator sizeofParameterPack
+//%CPP
+template<typename... T>
+void f(T... a)
+{
+ if (sizeof...(a)){
+ }
+} \ No newline at end of file
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 eec6ecfe326..26748d7efc0 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
@@ -71,7 +71,7 @@ public class ExpressionWriter extends NodeWriter{
private static final String TYPEID_OP = "typeid ("; //$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_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 NOT_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_noexcept:
case IASTUnaryExpression.op_alignOf:
+ case IASTUnaryExpression.op_sizeofParameterPack:
return true;
default:
@@ -333,6 +334,7 @@ public class ExpressionWriter extends NodeWriter{
case ICPPASTUnaryExpression.op_noexcept:
case IASTUnaryExpression.op_bracketedPrimary:
case IASTUnaryExpression.op_alignOf:
+ case IASTUnaryExpression.op_sizeofParameterPack:
return CLOSING_BRACKET_OP;
default:
System.err.println("Unkwown unaryExpressionType " + unaryExpressionType); //$NON-NLS-1$
@@ -519,7 +521,7 @@ public class ExpressionWriter extends NodeWriter{
case IASTTypeIdExpression.op_typeof:
return TYPEOF_OP;
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$
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java
index f5947591368..a38417f8b11 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/CodeFormatterVisitor.java
@@ -2669,9 +2669,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
case IASTUnaryExpression.op_sizeofParameterPack:
scribe.printNextToken(Token.t_sizeof, scribe.printComment());
scribe.printNextToken(Token.tELIPSE, scribe.printComment());
- if (peekNextToken() != Token.tLPAREN) {
- scribe.space();
- }
+ scribe.printNextToken(Token.tLPAREN);
operand.accept(this);
break;
case IASTUnaryExpression.op_throw:
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java
index f98eecadcda..405575896c0 100644
--- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java
@@ -3405,4 +3405,19 @@ public class CodeFormatterTest extends BaseUITestCase {
public void testFormatAttributedLabelStatements_Bug535266() throws Exception {
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();
+ }
}

Back to the top