GCC Code Coverage Report


Directory: ../
File: src/visualizer/CSTVisualizer.cpp
Date: 2025-02-09 04:23:07
Exec Total Coverage
Lines: 32 33 97.0%
Functions: 3 3 100.0%
Branches: 67 126 53.2%

Line Branch Exec Source
1 // Copyright (c) 2021-2025 ChilliBits. All rights reserved.
2
3 #include "CSTVisualizer.h"
4
5 #include <util/CommonUtil.h>
6
7 namespace spice::compiler {
8
9 1190571 std::string CSTVisualizer::buildRule(antlr4::ParserRuleContext *ctx) {
10
1/2
✓ Branch 0 (2→3) taken 1190571 times.
✗ Branch 1 (2→176) not taken.
1190571 std::stringstream result;
11
12 // Prepare strings
13
1/2
✓ Branch 0 (3→4) taken 1190571 times.
✗ Branch 1 (3→174) not taken.
1190571 const std::string codeLoc = tokenToCodeLoc(*ctx->start);
14
2/4
✓ Branch 0 (4→5) taken 1190571 times.
✗ Branch 1 (4→172) not taken.
✓ Branch 2 (6→7) taken 1190571 times.
✗ Branch 3 (6→172) not taken.
1190571 const std::string ruleName = ruleNames[ctx->getRuleIndex()];
15
2/4
✓ Branch 0 (7→8) taken 1190571 times.
✗ Branch 1 (7→108) not taken.
✓ Branch 2 (8→9) taken 1190571 times.
✗ Branch 3 (8→106) not taken.
1190571 const std::string nodeId = codeLoc + "_" + ruleName;
16
17 // Build result
18
4/8
✓ Branch 0 (10→11) taken 1190571 times.
✗ Branch 1 (10→168) not taken.
✓ Branch 2 (11→12) taken 1190571 times.
✗ Branch 3 (11→168) not taken.
✓ Branch 4 (12→13) taken 1190571 times.
✗ Branch 5 (12→168) not taken.
✓ Branch 6 (13→14) taken 1190571 times.
✗ Branch 7 (13→168) not taken.
1190571 result << nodeId << R"( [color="lightgreen",label=")" << ruleName << "\"];\n";
19
20 // Link parent node with the current one
21
1/2
✓ Branch 0 (14→15) taken 1190571 times.
✗ Branch 1 (14→168) not taken.
1190571 const std::string parentNodeIdBackup = parentNodeId;
22
2/2
✓ Branch 0 (16→17) taken 1189941 times.
✓ Branch 1 (16→25) taken 630 times.
1190571 if (!parentNodeId.empty())
23
6/12
✓ Branch 0 (17→18) taken 1189941 times.
✗ Branch 1 (17→111) not taken.
✓ Branch 2 (18→19) taken 1189941 times.
✗ Branch 3 (18→109) not taken.
✓ Branch 4 (19→20) taken 1189941 times.
✗ Branch 5 (19→109) not taken.
✓ Branch 6 (20→21) taken 1189941 times.
✗ Branch 7 (20→109) not taken.
✓ Branch 8 (21→22) taken 1189941 times.
✗ Branch 9 (21→109) not taken.
✓ Branch 10 (22→23) taken 1189941 times.
✗ Branch 11 (22→109) not taken.
1189941 result << getSpaces() << parentNodeId << " -> " << nodeId << ";\n";
24
1/2
✓ Branch 0 (25→26) taken 1190571 times.
✗ Branch 1 (25→166) not taken.
1190571 parentNodeId = nodeId; // Set parentNodeId for children
25
26 // Visit all the children
27
2/2
✓ Branch 0 (95→28) taken 1623375 times.
✓ Branch 1 (95→96) taken 1190571 times.
2813946 for (const auto &child : ctx->children) {
28
2/4
✓ Branch 0 (29→30) taken 1623375 times.
✗ Branch 1 (29→114) not taken.
✓ Branch 2 (30→31) taken 1623375 times.
✗ Branch 3 (30→112) not taken.
1623375 result << getSpaces();
29
30
3/4
✓ Branch 0 (32→33) taken 1623375 times.
✗ Branch 1 (32→34) not taken.
✓ Branch 2 (35→36) taken 433434 times.
✓ Branch 3 (35→87) taken 1189941 times.
1623375 if (const auto token = dynamic_cast<antlr4::tree::TerminalNode *>(child)) { // Terminal node
31
2/4
✓ Branch 0 (36→37) taken 433434 times.
✗ Branch 1 (36→158) not taken.
✓ Branch 2 (37→38) taken 433434 times.
✗ Branch 3 (37→158) not taken.
433434 std::string terminalCodeLoc = tokenToCodeLoc(*token->getSymbol());
32
1/2
✓ Branch 0 (38→39) taken 433434 times.
✗ Branch 1 (38→156) not taken.
433434 std::string terminalText = token->getText();
33
3/6
✓ Branch 0 (41→42) taken 433434 times.
✗ Branch 1 (41→123) not taken.
✓ Branch 2 (44→45) taken 433434 times.
✗ Branch 3 (44→117) not taken.
✓ Branch 4 (45→46) taken 433434 times.
✗ Branch 5 (45→115) not taken.
1733736 CommonUtil::replaceAll(terminalText, "\\", "\\\\");
34
3/6
✓ Branch 0 (52→53) taken 433434 times.
✗ Branch 1 (52→135) not taken.
✓ Branch 2 (55→56) taken 433434 times.
✗ Branch 3 (55→129) not taken.
✓ Branch 4 (56→57) taken 433434 times.
✗ Branch 5 (56→127) not taken.
1733736 CommonUtil::replaceAll(terminalText, "\"", "\\\"");
35
6/12
✓ Branch 0 (63→64) taken 433434 times.
✗ Branch 1 (63→143) not taken.
✓ Branch 2 (64→65) taken 433434 times.
✗ Branch 3 (64→143) not taken.
✓ Branch 4 (65→66) taken 433434 times.
✗ Branch 5 (65→143) not taken.
✓ Branch 6 (66→67) taken 433434 times.
✗ Branch 7 (66→143) not taken.
✓ Branch 8 (67→68) taken 433434 times.
✗ Branch 9 (67→141) not taken.
✓ Branch 10 (68→69) taken 433434 times.
✗ Branch 11 (68→139) not taken.
433434 std::string terminalName = std::string(vocabulary.getSymbolicName(token->getSymbol()->getType())) + ": " + terminalText;
36
37
4/8
✓ Branch 0 (72→73) taken 433434 times.
✗ Branch 1 (72→152) not taken.
✓ Branch 2 (73→74) taken 433434 times.
✗ Branch 3 (73→152) not taken.
✓ Branch 4 (74→75) taken 433434 times.
✗ Branch 5 (74→152) not taken.
✓ Branch 6 (75→76) taken 433434 times.
✗ Branch 7 (75→152) not taken.
433434 result << terminalCodeLoc << R"( [color="lightblue",label=")" << terminalName << "\"];\n";
38
6/12
✓ Branch 0 (76→77) taken 433434 times.
✗ Branch 1 (76→151) not taken.
✓ Branch 2 (77→78) taken 433434 times.
✗ Branch 3 (77→149) not taken.
✓ Branch 4 (78→79) taken 433434 times.
✗ Branch 5 (78→149) not taken.
✓ Branch 6 (79→80) taken 433434 times.
✗ Branch 7 (79→149) not taken.
✓ Branch 8 (80→81) taken 433434 times.
✗ Branch 9 (80→149) not taken.
✓ Branch 10 (81→82) taken 433434 times.
✗ Branch 11 (81→149) not taken.
433434 result << getSpaces() << nodeId << " -> " << terminalCodeLoc << "\n";
39 433434 } else { // Non-terminal node
40
3/6
✓ Branch 0 (87→88) taken 1189941 times.
✗ Branch 1 (87→163) not taken.
✓ Branch 2 (88→89) taken 1189941 times.
✗ Branch 3 (88→161) not taken.
✓ Branch 4 (89→90) taken 1189941 times.
✗ Branch 5 (89→159) not taken.
1189941 result << std::any_cast<std::string>(visit(child));
41 }
42 }
43
44 // Restore parent node id
45
1/2
✓ Branch 0 (96→97) taken 1190571 times.
✗ Branch 1 (96→166) not taken.
1190571 parentNodeId = parentNodeIdBackup;
46
47
1/2
✓ Branch 0 (97→98) taken 1190571 times.
✗ Branch 1 (97→166) not taken.
2381142 return result.str();
48 1190571 }
49
50 3246750 std::string CSTVisualizer::getSpaces() const {
51 3246750 std::string spaces;
52
2/2
✓ Branch 0 (6→4) taken 3246750 times.
✓ Branch 1 (6→7) taken 3246750 times.
6493500 for (int i = 0; i < currentTabs; i++)
53
1/2
✓ Branch 0 (4→5) taken 3246750 times.
✗ Branch 1 (4→9) not taken.
3246750 spaces += " ";
54 3246750 return spaces;
55 }
56
57 1624005 std::string CSTVisualizer::tokenToCodeLoc(const antlr4::Token &token) {
58
7/14
✓ Branch 0 (2→3) taken 1624005 times.
✗ Branch 1 (2→27) not taken.
✓ Branch 2 (3→4) taken 1624005 times.
✗ Branch 3 (3→27) not taken.
✓ Branch 4 (4→5) taken 1624005 times.
✗ Branch 5 (4→22) not taken.
✓ Branch 6 (5→6) taken 1624005 times.
✗ Branch 7 (5→22) not taken.
✓ Branch 8 (6→7) taken 1624005 times.
✗ Branch 9 (6→20) not taken.
✓ Branch 10 (7→8) taken 1624005 times.
✗ Branch 11 (7→18) not taken.
✓ Branch 12 (8→9) taken 1624005 times.
✗ Branch 13 (8→16) not taken.
1624005 return "L" + std::to_string(token.getLine()) + "C" + std::to_string(token.getCharPositionInLine());
59 }
60
61 } // namespace spice::compiler
62