From 54caa55279399d93a10d3c8732d14c844fd826fc Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Fri, 28 Aug 2026 18:47:33 +0100 Subject: [PATCH 1/2] fix: support new clang-dumper template names --- .../clang/parsers/data/ClavaDataParsers.java | 9 ++++ .../templates/TemplateArgumentTemplate.java | 6 +++ .../templates/template/DependentTemplate.java | 43 +++++++++++++++++++ .../templates/template/UsingTemplate.java | 41 ++++++++++++++++++ 4 files changed, 99 insertions(+) create mode 100644 ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/template/DependentTemplate.java create mode 100644 ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/template/UsingTemplate.java diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/ClavaDataParsers.java b/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/ClavaDataParsers.java index 3708d1380..cc8456ffe 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/ClavaDataParsers.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/ClavaDataParsers.java @@ -48,9 +48,11 @@ import pt.up.fe.specs.clava.ast.decl.data.templates.TemplateArgumentTemplate; import pt.up.fe.specs.clava.ast.decl.data.templates.TemplateArgumentTemplateExpansion; import pt.up.fe.specs.clava.ast.decl.data.templates.TemplateArgumentType; +import pt.up.fe.specs.clava.ast.decl.data.templates.template.DependentTemplate; import pt.up.fe.specs.clava.ast.decl.data.templates.template.QualifiedTemplate; import pt.up.fe.specs.clava.ast.decl.data.templates.template.SubstTemplateTemplateParm; import pt.up.fe.specs.clava.ast.decl.data.templates.template.Template; +import pt.up.fe.specs.clava.ast.decl.data.templates.template.UsingTemplate; import pt.up.fe.specs.clava.ast.decl.enums.ExplicitSpecKind; import pt.up.fe.specs.clava.ast.decl.enums.NestedNameSpecifierKind; import pt.up.fe.specs.clava.ast.expr.data.designator.ArrayDesignator; @@ -356,6 +358,13 @@ public static TemplateArgumentTemplate templateArgumentTemplate(LineStream lines parserData.getClavaNodes().queueSetNode(template, SubstTemplateTemplateParm.PARAMETER, lines.nextLine()); template.set(SubstTemplateTemplateParm.REPLACEMENT, templateArgumentTemplate(lines, parserData)); break; + case UsingTemplate: + parserData.getClavaNodes().queueSetNode(template, UsingTemplate.USING_SHADOW_DECL, lines.nextLine()); + break; + case DependentTemplate: + template.set(DependentTemplate.QUALIFIER, nestedNameSpecifier(lines, parserData)); + template.set(DependentTemplate.NAME, lines.nextLine()); + break; default: throw new RuntimeException("Case not implemented: " + nameKind); } diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/TemplateArgumentTemplate.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/TemplateArgumentTemplate.java index 2c2f30226..7713716e0 100644 --- a/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/TemplateArgumentTemplate.java +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/TemplateArgumentTemplate.java @@ -16,9 +16,11 @@ import org.suikasoft.jOptions.Datakey.DataKey; import org.suikasoft.jOptions.Datakey.KeyFactory; +import pt.up.fe.specs.clava.ast.decl.data.templates.template.DependentTemplate; import pt.up.fe.specs.clava.ast.decl.data.templates.template.QualifiedTemplate; import pt.up.fe.specs.clava.ast.decl.data.templates.template.SubstTemplateTemplateParm; import pt.up.fe.specs.clava.ast.decl.data.templates.template.Template; +import pt.up.fe.specs.clava.ast.decl.data.templates.template.UsingTemplate; import pt.up.fe.specs.clava.ast.type.enums.TemplateNameKind; import pt.up.fe.specs.util.exceptions.NotImplementedException; @@ -52,6 +54,10 @@ public static TemplateArgumentTemplate newInstance(TemplateNameKind nameKind) { return new QualifiedTemplate(); case SubstTemplateTemplateParm: return new SubstTemplateTemplateParm(); + case UsingTemplate: + return new UsingTemplate(); + case DependentTemplate: + return new DependentTemplate(); default: throw new NotImplementedException(nameKind); } diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/template/DependentTemplate.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/template/DependentTemplate.java new file mode 100644 index 000000000..aa6e17e07 --- /dev/null +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/template/DependentTemplate.java @@ -0,0 +1,43 @@ +/** + * Copyright 2026 SPeCS. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package pt.up.fe.specs.clava.ast.decl.data.templates.template; + +import org.suikasoft.jOptions.Datakey.DataKey; +import org.suikasoft.jOptions.Datakey.KeyFactory; + +import pt.up.fe.specs.clava.ClavaNode; +import pt.up.fe.specs.clava.ast.decl.data.nestedname.NestedNameSpecifier; +import pt.up.fe.specs.clava.ast.decl.data.templates.TemplateArgumentTemplate; +import pt.up.fe.specs.clava.ast.type.enums.TemplateNameKind; + +public class DependentTemplate extends TemplateArgumentTemplate { + + /// DATAKEYS BEGIN + + public final static DataKey QUALIFIER = KeyFactory.object("qualifier", + NestedNameSpecifier.class); + + public final static DataKey NAME = KeyFactory.string("name"); + + /// DATAKEYS END + + public DependentTemplate() { + super(TemplateNameKind.DependentTemplate); + } + + @Override + public String getCode(ClavaNode node) { + return get(QUALIFIER).getQualifier() + get(NAME); + } +} diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/template/UsingTemplate.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/template/UsingTemplate.java new file mode 100644 index 000000000..4a30eeec1 --- /dev/null +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/template/UsingTemplate.java @@ -0,0 +1,41 @@ +/** + * Copyright 2026 SPeCS. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package pt.up.fe.specs.clava.ast.decl.data.templates.template; + +import org.suikasoft.jOptions.Datakey.DataKey; +import org.suikasoft.jOptions.Datakey.KeyFactory; + +import pt.up.fe.specs.clava.ClavaNode; +import pt.up.fe.specs.clava.ast.decl.UsingShadowDecl; +import pt.up.fe.specs.clava.ast.decl.data.templates.TemplateArgumentTemplate; +import pt.up.fe.specs.clava.ast.type.enums.TemplateNameKind; + +public class UsingTemplate extends TemplateArgumentTemplate { + + /// DATAKEYS BEGIN + + public final static DataKey USING_SHADOW_DECL = KeyFactory.object("usingShadowDecl", + UsingShadowDecl.class); + + /// DATAKEYS END + + public UsingTemplate() { + super(TemplateNameKind.UsingTemplate); + } + + @Override + public String getCode(ClavaNode node) { + return get(USING_SHADOW_DECL).getDeclName(); + } +} From b1f55bbe282be172a967cb3f828c55974e8ca0c0 Mon Sep 17 00:00:00 2001 From: "L. Sousa" Date: Fri, 28 Aug 2026 22:21:09 +0100 Subject: [PATCH 2/2] fix: parse dependent template qualifiers as strings --- .../up/fe/specs/clang/parsers/data/ClavaDataParsers.java | 2 +- .../decl/data/templates/template/DependentTemplate.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/ClavaDataParsers.java b/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/ClavaDataParsers.java index cc8456ffe..531c6feea 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/ClavaDataParsers.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/parsers/data/ClavaDataParsers.java @@ -362,7 +362,7 @@ public static TemplateArgumentTemplate templateArgumentTemplate(LineStream lines parserData.getClavaNodes().queueSetNode(template, UsingTemplate.USING_SHADOW_DECL, lines.nextLine()); break; case DependentTemplate: - template.set(DependentTemplate.QUALIFIER, nestedNameSpecifier(lines, parserData)); + template.set(DependentTemplate.QUALIFIER, lines.nextLine()); template.set(DependentTemplate.NAME, lines.nextLine()); break; default: diff --git a/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/template/DependentTemplate.java b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/template/DependentTemplate.java index aa6e17e07..e8cf42403 100644 --- a/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/template/DependentTemplate.java +++ b/ClavaAst/src/pt/up/fe/specs/clava/ast/decl/data/templates/template/DependentTemplate.java @@ -17,7 +17,6 @@ import org.suikasoft.jOptions.Datakey.KeyFactory; import pt.up.fe.specs.clava.ClavaNode; -import pt.up.fe.specs.clava.ast.decl.data.nestedname.NestedNameSpecifier; import pt.up.fe.specs.clava.ast.decl.data.templates.TemplateArgumentTemplate; import pt.up.fe.specs.clava.ast.type.enums.TemplateNameKind; @@ -25,8 +24,7 @@ public class DependentTemplate extends TemplateArgumentTemplate { /// DATAKEYS BEGIN - public final static DataKey QUALIFIER = KeyFactory.object("qualifier", - NestedNameSpecifier.class); + public final static DataKey QUALIFIER = KeyFactory.string("qualifier"); public final static DataKey NAME = KeyFactory.string("name"); @@ -38,6 +36,8 @@ public DependentTemplate() { @Override public String getCode(ClavaNode node) { - return get(QUALIFIER).getQualifier() + get(NAME); + String qualifier = get(QUALIFIER); + String templateKeyword = qualifier.isEmpty() ? "" : "template "; + return qualifier + templateKeyword + get(NAME); } }