From 923b8d7e2d8907eee669bab8eb8016a8f321bb1a Mon Sep 17 00:00:00 2001 From: erick-alcachofa Date: Thu, 25 Dec 2025 13:35:50 -0600 Subject: [PATCH] refactor(parser): move parser utility methods to source file Signed-off-by: erick-alcachofa Relocate core parsing utility methods from the header to the implementation file to reduce header bloat and improve compilation times. - **Parser API**: Moved the definitions of `consume()`, `matchAndConsume()`, and `match()` from `Parser.hpp` to `Parser.cpp`. - **Cleanup**: Removed an unused `` include in `Types.cpp` discovered during the refactor. - **Organization**: Methods are now declared in the header and defined in the source file, maintaining a cleaner separation between interface and implementation. --- lib/include/artichoke/Parser/Parser.hpp | 47 +++++-------------------- lib/src/Parser/Parser.cpp | 38 ++++++++++++++++++++ lib/src/Parser/Types.cpp | 2 -- 3 files changed, 47 insertions(+), 40 deletions(-) diff --git a/lib/include/artichoke/Parser/Parser.hpp b/lib/include/artichoke/Parser/Parser.hpp index eb0f82a..eddba4e 100644 --- a/lib/include/artichoke/Parser/Parser.hpp +++ b/lib/include/artichoke/Parser/Parser.hpp @@ -40,6 +40,15 @@ namespace arti::lang { Expected parse(); + Expected + consume(TokenV type, std::string_view message); + + Expected + matchAndConsume(TokenV type); + + Expected + match(TokenV type, std::size_t offset = 0); + Expected> parseTopLevelDeclaration(); @@ -148,44 +157,6 @@ namespace arti::lang { Expected parseInfLoopStatement(); - Expected consume(TokenV type, std::string_view message) { - auto peeked = tokenizer.peekExpect(type, message); - - if (! peeked) { - return Unexpected<>{ std::move(peeked).error() }; - } - - std::ignore = tokenizer.consume(); - - return peeked; - } - - Expected matchAndConsume(TokenV type) { - auto peeked = tokenizer.peek(); - - if (! peeked) { - return Unexpected<>{ std::move(peeked).error() }; - } - - if (peeked->value != type) { - return false; - } - - std::ignore = tokenizer.consume(); - - return true; - } - - Expected match(TokenV type, std::size_t offset = 0) { - auto peeked = tokenizer.peek(offset); - - if (! peeked) { - return Unexpected<>{ std::move(peeked).error() }; - } - - return (peeked->value == type); - } - private: std::string unitName; std::string sourceCode; diff --git a/lib/src/Parser/Parser.cpp b/lib/src/Parser/Parser.cpp index 637d8e1..a701eb8 100644 --- a/lib/src/Parser/Parser.cpp +++ b/lib/src/Parser/Parser.cpp @@ -64,4 +64,42 @@ namespace arti::lang { return unit; } + Expected Parser::consume(TokenV type, std::string_view message) { + auto peeked = tokenizer.peekExpect(type, message); + + if (! peeked) { + return Unexpected<>{ std::move(peeked).error() }; + } + + std::ignore = tokenizer.consume(); + + return peeked; + } + + Expected Parser::matchAndConsume(TokenV type) { + auto peeked = tokenizer.peek(); + + if (! peeked) { + return Unexpected<>{ std::move(peeked).error() }; + } + + if (peeked->value != type) { + return false; + } + + std::ignore = tokenizer.consume(); + + return true; + } + + Expected Parser::match(TokenV type, std::size_t offset) { + auto peeked = tokenizer.peek(offset); + + if (! peeked) { + return Unexpected<>{ std::move(peeked).error() }; + } + + return (peeked->value == type); + } + } // namespace arti::lang diff --git a/lib/src/Parser/Types.cpp b/lib/src/Parser/Types.cpp index c354de0..4d17bcf 100644 --- a/lib/src/Parser/Types.cpp +++ b/lib/src/Parser/Types.cpp @@ -22,8 +22,6 @@ #include -#include - namespace arti::lang { Expected Parser::parseNamespacedIdentifier() {