From f65fa5b7c5d60ac6701626b4d05167c26390215f Mon Sep 17 00:00:00 2001 From: Hansruedi Patzen Date: Mon, 28 May 2018 15:03:00 +0200 Subject: Bug 535196: [C++17] Support *this in lambda capture Implementation and tests. Change-Id: If32911514eb62078215b5f06be12289fa571e9a3 Signed-off-by: Hansruedi Patzen --- .../cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java | 7 +++++++ .../cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java | 3 +++ 2 files changed, 10 insertions(+) (limited to 'core/org.eclipse.cdt.core/parser/org') diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 575083028c7..f4564c30b10 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -2122,11 +2122,18 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { switch (LT(1)) { case IToken.t_this: + result.setIsByReference(true); return setRange(result, offset, consume().getEndOffset()); case IToken.tAMPER: consume(); referenceCapture = true; break; + case IToken.tSTAR: + if (LT(2) == IToken.t_this) { + consume(); + return setRange(result, offset, consume().getEndOffset()); + } + break; } final IASTName identifier = identifier(); 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 7816cef8d35..eec6ecfe326 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 @@ -570,6 +570,9 @@ public class ExpressionWriter extends NodeWriter{ private void writeCapture(ICPPASTCapture capture) { if (capture.capturesThisPointer()) { + if (!capture.isByReference()) { + scribe.print(STAR_OP); + } scribe.print(THIS); } else { if (capture instanceof ICPPASTInitCapture) { -- cgit v1.2.3