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..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 @@ -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, lines.nextLine()); + 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..e8cf42403 --- /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.templates.TemplateArgumentTemplate;
+import pt.up.fe.specs.clava.ast.type.enums.TemplateNameKind;
+
+public class DependentTemplate extends TemplateArgumentTemplate {
+
+ /// DATAKEYS BEGIN
+
+ public final static DataKey
+ * 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