From dd5bbae055fd34ce2e12ef63f8a261c6b15dc83e Mon Sep 17 00:00:00 2001 From: _ov4 Date: Wed, 21 Oct 2026 05:43:35 +0000 Subject: feat(parser): parse TEMPLATE declarations, template ids and parameter packs Co-Authored-By: Claude Opus 5.5 --- include/cps/Parser.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'include/cps/Parser.h') diff --git a/include/cps/Parser.h b/include/cps/Parser.h index eedc3f8..f2c0868 100644 --- a/include/cps/Parser.h +++ b/include/cps/Parser.h @@ -4,6 +4,7 @@ #include "cps/AST.h" #include "cps/TypeAST.h" #include "cps/FunctionAST.h" +#include "cps/TemplateAST.h" #include #include #include @@ -23,6 +24,8 @@ class Parser { std::vector CaseBodyDepths; unsigned NumErrors = 0; unsigned BlockDepth = 0; // ParseBlock nesting; 1 = top level + std::vector CurrentTemplate; + IdentifierSet PackNames; std::map BinopPrecedence; IdentifierSet TypeNames = { @@ -49,6 +52,9 @@ class Parser { std::unique_ptr ParseMemberCall( const std::string &Name, std::vector Accesses, int Line); std::string ParseTypeName(bool AllowVoid = false); + std::optional> ParseTemplateArgs(); + bool isTemplateCall(); + bool isTemplatePack(const std::string &Name) const; std::unique_ptr ParseStatement(); std::unique_ptr ParseStatementImpl(); @@ -70,6 +76,7 @@ class Parser { bool ParseDesignatorSuffix(std::vector &Out); std::unique_ptr ParseTypeDecl(); + std::unique_ptr ParseTemplateDecl(); std::optional> ParseRecordBody( const std::string &Name, int Line, int EndToken, std::vector> *Methods = nullptr); -- cgit v1.3.1-4-g156e