LCOV - code coverage report
Current view: top level - src/visitors/typeAnalysis - typeAnalysisChained.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 27 0
Test Date: 2025-04-18 15:53:49 Functions: 0.0 % 1 0

            Line data    Source code
       1              : #include "../../../inc/visitors/typeAnalysis/typeAnalysis.h"
       2              : #include "../../../inc/parsingAnalysis/ast/chained/ast_chained.h"
       3              : #include <memory>
       4              : 
       5              : namespace nicole {
       6              : 
       7              : /*
       8              : - comprueba que base no sea void
       9              : - retorna ultimo tipo encontrado
      10              : */
      11              : std::expected<std::shared_ptr<Type>, Error>
      12            0 : TypeAnalysis::visit(const AST_CHAINED *node) const noexcept {
      13            0 :   if (!node) {
      14            0 :     return createError(ERROR_TYPE::NULL_NODE, "invalid AST_CHAINED");
      15            0 :   }
      16            0 :   auto baseRes = node->base()->accept(*this);
      17            0 :   if (!baseRes)
      18            0 :     return createError(baseRes.error());
      19            0 :   if (const auto enumType{std::dynamic_pointer_cast<EnumType>(*baseRes)}) {
      20            0 :     if (node->operations().size()) {
      21            0 :       return createError(ERROR_TYPE::TYPE, "an enum constructor call cannot appear in a chained expression");
      22            0 :     }
      23            0 :     node->setReturnedFromAnalysis(*baseRes);
      24            0 :     return *baseRes;
      25            0 :   }
      26            0 :   if (const auto placeHolder{std::dynamic_pointer_cast<PlaceHolder>(*baseRes)}) {
      27            0 :     node->setReturnedFromAnalysis(*baseRes);
      28            0 :     return *baseRes;
      29            0 :   }
      30            0 :   currentType_ = baseRes.value();
      31              : 
      32            0 :   for (const auto &op : node->operations()) {
      33            0 :     auto opRes = op->accept(*this);
      34            0 :     if (!opRes)
      35            0 :       return createError(opRes.error());
      36            0 :   }
      37            0 :   node->setReturnedFromAnalysis(currentType_);
      38            0 :   return currentType_;
      39            0 : }
      40              : 
      41              : }
        

Generated by: LCOV version 2.0-1