LCOV - code coverage report
Current view: top level - src/lexicalAnalysis - tokenStream.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 79.0 % 62 49
Test Date: 2025-04-18 15:53:49 Functions: 77.8 % 9 7

            Line data    Source code
       1              : #include "../../inc/lexicalAnalysis/tokenStream.h"
       2              : 
       3              : namespace nicole {
       4              : 
       5          135 : const std::expected<std::monostate, Error> TokenStream::eat() noexcept {
       6          135 :   if (currentPos_ < tokens_.size()) {
       7          126 :     ++currentPos_;
       8          126 :     return std::expected<std::monostate, Error>{std::monostate{}};
       9          126 :   }
      10            9 :   return createError(ERROR_TYPE::EAT, "invalid access to tokens while eating");
      11          135 : }
      12              : 
      13          144 : bool TokenStream::isEnd() const noexcept {
      14          144 :   return currentPos_ == tokens_.size();
      15          144 : }
      16              : 
      17           18 : const std::expected<Token, Error> TokenStream::current() const noexcept {
      18           18 :   if (currentPos_ < tokens_.size())
      19            9 :     return tokens_[currentPos_];
      20            9 :   return createError(ERROR_TYPE::CURRENT, "invalid access to tokens");
      21           18 : }
      22              : 
      23              : const std::expected<Token, Error>
      24           18 : TokenStream::lookAhead(const size_t pos) const noexcept {
      25           18 :   if (currentPos_ + pos < tokens_.size())
      26            9 :     return tokens_[currentPos_ + pos];
      27            9 :   return createError(ERROR_TYPE::LOOK_AHEAD, "invalid access to tokens");
      28           18 : }
      29              : 
      30            0 : const std::expected<Token, Error> TokenStream::lastRead() const noexcept {
      31            0 :   if (currentPos_ - 1 < tokens_.size())
      32            0 :     return tokens_[currentPos_ - 1];
      33            0 :   return createError(ERROR_TYPE::LAST_READ, "invalid access to tokens");
      34            0 : }
      35              : 
      36              : const std::expected<bool, Error>
      37           18 : TokenStream::isCurrentTokenType(const TokenType type) const noexcept {
      38           18 :   if (currentPos_ < tokens_.size())
      39            9 :     return tokens_[currentPos_].type() == type;
      40            9 :   return createError(ERROR_TYPE::IS_CURRENT_TOKEN_TYPE,
      41            9 :                      "invalid access to tokens");
      42           18 : }
      43              : 
      44              : bool TokenStream::isTokenAheadBeforeSemicolon(
      45           18 :     const TokenType type) const noexcept {
      46           18 :   bool foundToken{false};
      47           63 :   for (size_t i{currentPos_}; i < tokens_.size(); ++i) {
      48           63 :     auto tk{tokens_[i]};
      49           63 :     if (tk.type() == type) {
      50            9 :       foundToken = true;
      51            9 :       break;
      52            9 :     }
      53           54 :     if (tk.type() == TokenType::SEMICOLON) {
      54            9 :       break;
      55            9 :     }
      56           54 :   }
      57           18 :   return foundToken;
      58           18 : }
      59              : 
      60              : const std::expected<std::monostate, Error>
      61              : TokenStream::insertAfter(const TokenStream &tkStream,
      62           18 :                          const size_t pos) noexcept {
      63           18 :   if (pos == std::numeric_limits<int>::infinity()) {
      64            9 :     return createError(ERROR_TYPE::INSERT_AFTER,
      65            9 :                        "cannot insert after the given position");
      66            9 :   }
      67            9 :   tokens_.insert(tokens_.begin() + static_cast<long>(pos), tkStream.begin(),
      68            9 :                  tkStream.end());
      69            9 :   return std::expected<std::monostate, Error>{std::monostate{}};
      70           18 : }
      71              : 
      72            0 : void TokenStream::shiftToSemicolon() noexcept {
      73            0 :   while (currentPos_ < size()) {
      74            0 :     if (tokens_[currentPos_].type() == TokenType::SEMICOLON) {
      75            0 :       break;
      76            0 :     }
      77            0 :     ++currentPos_;
      78            0 :   }
      79            0 : }
      80              : 
      81              : } // namespace nicole
        

Generated by: LCOV version 2.0-1