From aafb1d951ab605bfcd5e46b75feecf5470a40bf9 Mon Sep 17 00:00:00 2001 From: "Igor V. Kovalenko" Date: Tue, 28 Mar 2023 00:20:20 +0300 Subject: [PATCH] Recognize C++17 deduction guides feature test macro and pass it via TU --- .../core/dom/ast/cpp/ICPPASTTranslationUnit.java | 14 ++++++++++++++ .../core/dom/parser/cpp/CPPASTTranslationUnit.java | 12 ++++++++++++ .../core/dom/parser/cpp/GNUCPPSourceParser.java | 4 ++++ 3 files changed, 30 insertions(+) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTTranslationUnit.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTTranslationUnit.java index a099624481f..65554e638fb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTTranslationUnit.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTTranslationUnit.java @@ -46,4 +46,18 @@ public interface ICPPASTTranslationUnit extends IASTTranslationUnit { */ @Override public ICPPASTTranslationUnit copy(CopyStyle style); + + /** + * Sets whether this AST should enable class template argument deduction. + * + * @since 8.1 + */ + public void setEnableClassTemplateArgumentDeduction(boolean flag); + + /** + * Returns whether this AST should enable class template argument deduction. + * + * @since 8.1 + */ + public boolean getEnableClassTemplateArgumentDeduction(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTranslationUnit.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTranslationUnit.java index 437d74f03e4..19ecf8d4463 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTranslationUnit.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTranslationUnit.java @@ -56,6 +56,7 @@ public class CPPASTTranslationUnit extends ASTTranslationUnit implements ICPPAST private ICPPNamespace fBinding; private final CPPScopeMapper fScopeMapper; private CPPASTAmbiguityResolver fAmbiguityResolver; + private boolean fEnableClassTemplateArgumentDeduction; // Caches. private final Map fFinalOverriderMapCache = new HashMap<>(); @@ -78,6 +79,7 @@ public class CPPASTTranslationUnit extends ASTTranslationUnit implements ICPPAST @Override public CPPASTTranslationUnit copy(CopyStyle style) { CPPASTTranslationUnit copy = new CPPASTTranslationUnit(); + copy.setEnableClassTemplateArgumentDeduction(getEnableClassTemplateArgumentDeduction()); return copy(copy, style); } @@ -278,4 +280,14 @@ public class CPPASTTranslationUnit extends ASTTranslationUnit implements ICPPAST public ICPPClassTemplatePartialSpecialization mapToAST(ICPPClassTemplatePartialSpecialization indexSpec) { return fScopeMapper.mapToAST(indexSpec); } + + @Override + public void setEnableClassTemplateArgumentDeduction(boolean flag) { + fEnableClassTemplateArgumentDeduction = flag; + } + + @Override + public boolean getEnableClassTemplateArgumentDeduction() { + return fEnableClassTemplateArgumentDeduction; + } } 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 8a6faf853e9..d2c908bed04 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 @@ -210,6 +210,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { private final boolean supportGCCStyleDesignators; private final boolean supportFoldExpression; private final boolean supportChar8TypeLiterals; + private final boolean supportClassTemplateArgumentDeduction; private final IIndex index; protected ICPPASTTranslationUnit translationUnit; @@ -249,6 +250,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { additionalNumericalSuffixes = scanner.getAdditionalNumericLiteralSuffixes(); supportFoldExpression = true; supportChar8TypeLiterals = scanner.getMacroDefinitions().containsKey("__cpp_char8_t"); //$NON-NLS-1$ + supportClassTemplateArgumentDeduction = scanner.getMacroDefinitions().containsKey("__cpp_deduction_guides"); //$NON-NLS-1$ } @Override @@ -5572,6 +5574,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { ((ASTTranslationUnit) translationUnit).setupBuiltinBindings(builtinBindingsProvider); } } + + translationUnit.setEnableClassTemplateArgumentDeduction(supportClassTemplateArgumentDeduction); } private void consumeArrayModifiers(DeclarationOptions option, List collection)