GCC Code Coverage Report


Directory: ../
File: src/visualizer/ASTVisualizer.h
Date: 2025-09-17 23:16:16
Exec Total Coverage
Lines: 94 101 93.1%
Functions: 156 170 91.8%
Branches: 184 392 46.9%

Line Branch Exec Source
1 // Copyright (c) 2021-2025 ChilliBits. All rights reserved.
2
3 #pragma once
4
5 #include <string>
6 #include <vector>
7
8 #include <CompilerPass.h>
9 #include <ast/ASTNodes.h>
10 #include <ast/AbstractASTVisitor.h>
11 #include <util/CommonUtil.h>
12
13 namespace spice::compiler {
14
15 /**
16 * Visitor for debug purposes (is only executed in the compiler debug mode and when explicitly enabling it via cli flag)
17 *
18 * Jobs:
19 * - Visualize AST
20 */
21 class ASTVisualizer final : CompilerPass, public AbstractASTVisitor {
22 public:
23 // Constructors
24 using CompilerPass::CompilerPass;
25
26 // Visitor methods
27
2/4
✓ Branch 0 (2→3) taken 721 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 721 times.
✗ Branch 3 (3→8) not taken.
721 std::any visitEntry(EntryNode *ctx) override { return buildNode(ctx); }
28
2/4
✓ Branch 0 (2→3) taken 8 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 8 times.
✗ Branch 3 (3→8) not taken.
8 std::any visitMainFctDef(MainFctDefNode *ctx) override { return buildNode(ctx); }
29
2/4
✓ Branch 0 (2→3) taken 7382 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 7382 times.
✗ Branch 3 (3→8) not taken.
7382 std::any visitFctDef(FctDefNode *ctx) override { return buildNode(ctx); }
30
2/4
✓ Branch 0 (2→3) taken 3656 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 3656 times.
✗ Branch 3 (3→8) not taken.
3656 std::any visitProcDef(ProcDefNode *ctx) override { return buildNode(ctx); }
31
2/4
✓ Branch 0 (2→3) taken 11038 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 11038 times.
✗ Branch 3 (3→8) not taken.
11038 std::any visitFctName(FctNameNode *ctx) override { return buildNode(ctx); }
32
2/4
✓ Branch 0 (2→3) taken 550 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 550 times.
✗ Branch 3 (3→8) not taken.
550 std::any visitStructDef(StructDefNode *ctx) override { return buildNode(ctx); }
33
2/4
✓ Branch 0 (2→3) taken 80 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 80 times.
✗ Branch 3 (3→8) not taken.
80 std::any visitInterfaceDef(InterfaceDefNode *ctx) override { return buildNode(ctx); }
34
2/4
✓ Branch 0 (2→3) taken 59 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 59 times.
✗ Branch 3 (3→8) not taken.
59 std::any visitEnumDef(EnumDefNode *ctx) override { return buildNode(ctx); }
35
2/4
✓ Branch 0 (2→3) taken 854 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 854 times.
✗ Branch 3 (3→8) not taken.
854 std::any visitGenericTypeDef(GenericTypeDefNode *ctx) override { return buildNode(ctx); }
36
2/4
✓ Branch 0 (2→3) taken 60 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 60 times.
✗ Branch 3 (3→8) not taken.
60 std::any visitAliasDef(AliasDefNode *ctx) override { return buildNode(ctx); }
37
2/4
✓ Branch 0 (2→3) taken 1149 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 1149 times.
✗ Branch 3 (3→8) not taken.
1149 std::any visitGlobalVarDef(GlobalVarDefNode *ctx) override { return buildNode(ctx); }
38
2/4
✓ Branch 0 (2→3) taken 952 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 952 times.
✗ Branch 3 (3→8) not taken.
952 std::any visitExtDecl(ExtDeclNode *ctx) override { return buildNode(ctx); }
39
2/4
✓ Branch 0 (2→3) taken 461 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 461 times.
✗ Branch 3 (3→8) not taken.
461 std::any visitImportDef(ImportDefNode *ctx) override { return buildNode(ctx); }
40
2/4
✓ Branch 0 (2→3) taken 2426 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 2426 times.
✗ Branch 3 (3→8) not taken.
2426 std::any visitUnsafeBlock(UnsafeBlockNode *ctx) override { return buildNode(ctx); }
41
2/4
✓ Branch 0 (2→3) taken 1261 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 1261 times.
✗ Branch 3 (3→8) not taken.
1261 std::any visitForLoop(ForLoopNode *ctx) override { return buildNode(ctx); }
42
2/4
✓ Branch 0 (2→3) taken 77 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 77 times.
✗ Branch 3 (3→8) not taken.
77 std::any visitForeachLoop(ForeachLoopNode *ctx) override { return buildNode(ctx); }
43
2/4
✓ Branch 0 (2→3) taken 728 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 728 times.
✗ Branch 3 (3→8) not taken.
728 std::any visitWhileLoop(WhileLoopNode *ctx) override { return buildNode(ctx); }
44
2/4
✓ Branch 0 (2→3) taken 3 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 3 times.
✗ Branch 3 (3→8) not taken.
3 std::any visitDoWhileLoop(DoWhileLoopNode *ctx) override { return buildNode(ctx); }
45
2/4
✓ Branch 0 (2→3) taken 3970 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 3970 times.
✗ Branch 3 (3→8) not taken.
3970 std::any visitIfStmt(IfStmtNode *ctx) override { return buildNode(ctx); }
46
2/4
✓ Branch 0 (2→3) taken 228 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 228 times.
✗ Branch 3 (3→8) not taken.
228 std::any visitElseStmt(ElseStmtNode *ctx) override { return buildNode(ctx); }
47
2/4
✓ Branch 0 (2→3) taken 5 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 5 times.
✗ Branch 3 (3→8) not taken.
5 std::any visitSwitchStmt(SwitchStmtNode *ctx) override { return buildNode(ctx); }
48
2/4
✓ Branch 0 (2→3) taken 31 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 31 times.
✗ Branch 3 (3→8) not taken.
31 std::any visitCaseBranch(CaseBranchNode *ctx) override { return buildNode(ctx); }
49
2/4
✓ Branch 0 (2→3) taken 3 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 3 times.
✗ Branch 3 (3→8) not taken.
3 std::any visitDefaultBranch(DefaultBranchNode *ctx) override { return buildNode(ctx); }
50
2/4
✓ Branch 0 (2→3) taken 106 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 106 times.
✗ Branch 3 (3→8) not taken.
106 std::any visitAssertStmt(AssertStmtNode *ctx) override { return buildNode(ctx); }
51 std::any visitAnonymousBlockStmt(AnonymousBlockStmtNode *ctx) override { return buildNode(ctx); }
52
2/4
✓ Branch 0 (2→3) taken 19712 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 19712 times.
✗ Branch 3 (3→8) not taken.
19712 std::any visitStmtLst(StmtLstNode *ctx) override { return buildNode(ctx); }
53
2/4
✓ Branch 0 (2→3) taken 6369 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 6369 times.
✗ Branch 3 (3→8) not taken.
6369 std::any visitTypeLst(TypeLstNode *ctx) override { return buildNode(ctx); }
54
2/4
✓ Branch 0 (2→3) taken 914 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 914 times.
✗ Branch 3 (3→8) not taken.
914 std::any visitTypeLstWithEllipsis(TypeLstWithEllipsisNode *ctx) override { return buildNode(ctx); }
55
2/4
✓ Branch 0 (2→3) taken 854 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 854 times.
✗ Branch 3 (3→8) not taken.
854 std::any visitTypeAltsLst(TypeAltsLstNode *ctx) override { return buildNode(ctx); }
56
2/4
✓ Branch 0 (2→3) taken 8474 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 8474 times.
✗ Branch 3 (3→8) not taken.
8474 std::any visitParamLst(ParamLstNode *ctx) override { return buildNode(ctx); }
57
2/4
✓ Branch 0 (2→3) taken 11113 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 11113 times.
✗ Branch 3 (3→8) not taken.
11113 std::any visitArgLst(ArgLstNode *ctx) override { return buildNode(ctx); }
58
2/4
✓ Branch 0 (2→3) taken 59 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 59 times.
✗ Branch 3 (3→8) not taken.
59 std::any visitEnumItemLst(EnumItemLstNode *ctx) override { return buildNode(ctx); }
59
2/4
✓ Branch 0 (2→3) taken 713 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 713 times.
✗ Branch 3 (3→8) not taken.
713 std::any visitEnumItem(EnumItemNode *ctx) override { return buildNode(ctx); }
60
2/4
✓ Branch 0 (2→3) taken 1239 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 1239 times.
✗ Branch 3 (3→8) not taken.
1239 std::any visitField(FieldNode *ctx) override { return buildNode(ctx); }
61
2/4
✓ Branch 0 (2→3) taken 200 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 200 times.
✗ Branch 3 (3→8) not taken.
200 std::any visitSignature(SignatureNode *ctx) override { return buildNode(ctx); }
62
2/4
✓ Branch 0 (2→3) taken 18519 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 18519 times.
✗ Branch 3 (3→8) not taken.
18519 std::any visitDeclStmt(DeclStmtNode *ctx) override { return buildNode(ctx); }
63
2/4
✓ Branch 0 (2→3) taken 12302 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 12302 times.
✗ Branch 3 (3→8) not taken.
12302 std::any visitExprStmt(ExprStmtNode *ctx) override { return buildNode(ctx); }
64
2/4
✓ Branch 0 (2→3) taken 29111 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 29111 times.
✗ Branch 3 (3→8) not taken.
29111 std::any visitQualifierLst(QualifierLstNode *ctx) override { return buildNode(ctx); }
65
2/4
✓ Branch 0 (2→3) taken 35234 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 35234 times.
✗ Branch 3 (3→8) not taken.
35234 std::any visitQualifier(QualifierNode *ctx) override { return buildNode(ctx); }
66
2/4
✓ Branch 0 (2→3) taken 325 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 325 times.
✗ Branch 3 (3→8) not taken.
325 std::any visitModAttr(ModAttrNode *ctx) override { return buildNode(ctx); }
67
2/4
✓ Branch 0 (2→3) taken 423 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 423 times.
✗ Branch 3 (3→8) not taken.
423 std::any visitTopLevelDefinitionAttr(TopLevelDefinitionAttrNode *ctx) override { return buildNode(ctx); }
68
2/4
✓ Branch 0 (2→3) taken 1 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 1 times.
✗ Branch 3 (3→8) not taken.
1 std::any visitLambdaAttr(LambdaAttrNode *ctx) override { return buildNode(ctx); }
69
2/4
✓ Branch 0 (2→3) taken 749 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 749 times.
✗ Branch 3 (3→8) not taken.
749 std::any visitAttrLst(AttrLstNode *ctx) override { return buildNode(ctx); }
70
2/4
✓ Branch 0 (2→3) taken 1188 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 1188 times.
✗ Branch 3 (3→8) not taken.
1188 std::any visitAttr(AttrNode *ctx) override { return buildNode(ctx); }
71
2/4
✓ Branch 0 (2→3) taken 48 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 48 times.
✗ Branch 3 (3→8) not taken.
48 std::any visitCaseConstant(CaseConstantNode *ctx) override { return buildNode(ctx); }
72
2/4
✓ Branch 0 (2→3) taken 8969 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 8969 times.
✗ Branch 3 (3→8) not taken.
8969 std::any visitReturnStmt(ReturnStmtNode *ctx) override { return buildNode(ctx); }
73
2/4
✓ Branch 0 (2→3) taken 103 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 103 times.
✗ Branch 3 (3→8) not taken.
103 std::any visitBreakStmt(BreakStmtNode *ctx) override { return buildNode(ctx); }
74
2/4
✓ Branch 0 (2→3) taken 184 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 184 times.
✗ Branch 3 (3→8) not taken.
184 std::any visitContinueStmt(ContinueStmtNode *ctx) override { return buildNode(ctx); }
75 std::any visitFallthroughStmt(FallthroughStmtNode *ctx) override { return buildNode(ctx); }
76
2/4
✓ Branch 0 (2→3) taken 1426 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 1426 times.
✗ Branch 3 (3→8) not taken.
1426 std::any visitBuiltinCall(BuiltinCallNode *ctx) override { return buildNode(ctx); }
77
2/4
✓ Branch 0 (2→3) taken 177 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 177 times.
✗ Branch 3 (3→8) not taken.
177 std::any visitPrintfCall(PrintfCallNode *ctx) override { return buildNode(ctx); }
78
2/4
✓ Branch 0 (2→3) taken 234 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 234 times.
✗ Branch 3 (3→8) not taken.
234 std::any visitSizeofCall(SizeofCallNode *ctx) override { return buildNode(ctx); }
79 std::any visitAlignofCall(AlignofCallNode *ctx) override { return buildNode(ctx); }
80 std::any visitTypeidCall(TypeidCallNode *ctx) override { return buildNode(ctx); }
81
2/4
✓ Branch 0 (2→3) taken 108 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 108 times.
✗ Branch 3 (3→8) not taken.
108 std::any visitLenCall(LenCallNode *ctx) override { return buildNode(ctx); }
82
2/4
✓ Branch 0 (2→3) taken 907 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 907 times.
✗ Branch 3 (3→8) not taken.
907 std::any visitPanicCall(PanicCallNode *ctx) override { return buildNode(ctx); }
83 std::any visitSysCall(SysCallNode *ctx) override { return buildNode(ctx); }
84
2/4
✓ Branch 0 (2→3) taken 66974 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 66974 times.
✗ Branch 3 (3→8) not taken.
66974 std::any visitAssignExpr(AssignExprNode *ctx) override { return buildNode(ctx); }
85
2/4
✓ Branch 0 (2→3) taken 60028 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 60028 times.
✗ Branch 3 (3→8) not taken.
60028 std::any visitTernaryExpr(TernaryExprNode *ctx) override { return buildNode(ctx); }
86
2/4
✓ Branch 0 (2→3) taken 60818 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 60818 times.
✗ Branch 3 (3→8) not taken.
60818 std::any visitLogicalOrExpr(LogicalOrExprNode *ctx) override { return buildNode(ctx); }
87
2/4
✓ Branch 0 (2→3) taken 62035 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 62035 times.
✗ Branch 3 (3→8) not taken.
62035 std::any visitLogicalAndExpr(LogicalAndExprNode *ctx) override { return buildNode(ctx); }
88
2/4
✓ Branch 0 (2→3) taken 62290 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 62290 times.
✗ Branch 3 (3→8) not taken.
62290 std::any visitBitwiseOrExpr(BitwiseOrExprNode *ctx) override { return buildNode(ctx); }
89
2/4
✓ Branch 0 (2→3) taken 62363 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 62363 times.
✗ Branch 3 (3→8) not taken.
62363 std::any visitBitwiseXorExpr(BitwiseXorExprNode *ctx) override { return buildNode(ctx); }
90
2/4
✓ Branch 0 (2→3) taken 62370 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 62370 times.
✗ Branch 3 (3→8) not taken.
62370 std::any visitBitwiseAndExpr(BitwiseAndExprNode *ctx) override { return buildNode(ctx); }
91
2/4
✓ Branch 0 (2→3) taken 62387 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 62387 times.
✗ Branch 3 (3→8) not taken.
62387 std::any visitEqualityExpr(EqualityExprNode *ctx) override { return buildNode(ctx); }
92
2/4
✓ Branch 0 (2→3) taken 66878 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 66878 times.
✗ Branch 3 (3→8) not taken.
66878 std::any visitRelationalExpr(RelationalExprNode *ctx) override { return buildNode(ctx); }
93
2/4
✓ Branch 0 (2→3) taken 70518 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 70518 times.
✗ Branch 3 (3→8) not taken.
70518 std::any visitShiftExpr(ShiftExprNode *ctx) override { return buildNode(ctx); }
94
2/4
✓ Branch 0 (2→3) taken 70625 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 70625 times.
✗ Branch 3 (3→8) not taken.
70625 std::any visitAdditiveExpr(AdditiveExprNode *ctx) override { return buildNode(ctx); }
95
2/4
✓ Branch 0 (2→3) taken 74480 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 74480 times.
✗ Branch 3 (3→8) not taken.
74480 std::any visitMultiplicativeExpr(MultiplicativeExprNode *ctx) override { return buildNode(ctx); }
96
2/4
✓ Branch 0 (2→3) taken 75719 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 75719 times.
✗ Branch 3 (3→8) not taken.
75719 std::any visitCastExpr(CastExprNode *ctx) override { return buildNode(ctx); }
97
2/4
✓ Branch 0 (2→3) taken 81332 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 81332 times.
✗ Branch 3 (3→8) not taken.
81332 std::any visitPrefixUnaryExpr(PrefixUnaryExprNode *ctx) override { return buildNode(ctx); }
98
2/4
✓ Branch 0 (2→3) taken 103410 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 103410 times.
✗ Branch 3 (3→8) not taken.
103410 std::any visitPostfixUnaryExpr(PostfixUnaryExprNode *ctx) override { return buildNode(ctx); }
99
2/4
✓ Branch 0 (2→3) taken 80291 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 80291 times.
✗ Branch 3 (3→8) not taken.
80291 std::any visitAtomicExpr(AtomicExprNode *ctx) override { return buildNode(ctx); }
100
2/4
✓ Branch 0 (2→3) taken 15529 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 15529 times.
✗ Branch 3 (3→8) not taken.
15529 std::any visitValue(ValueNode *ctx) override { return buildNode(ctx); }
101
2/4
✓ Branch 0 (2→3) taken 14705 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 14705 times.
✗ Branch 3 (3→8) not taken.
14705 std::any visitConstant(ConstantNode *ctx) override { return buildNode(ctx); }
102
2/4
✓ Branch 0 (2→3) taken 13993 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 13993 times.
✗ Branch 3 (3→8) not taken.
13993 std::any visitFctCall(FctCallNode *ctx) override { return buildNode(ctx); }
103
2/4
✓ Branch 0 (2→3) taken 9 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 9 times.
✗ Branch 3 (3→8) not taken.
9 std::any visitArrayInitialization(ArrayInitializationNode *ctx) override { return buildNode(ctx); }
104
2/4
✓ Branch 0 (2→3) taken 161 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 161 times.
✗ Branch 3 (3→8) not taken.
161 std::any visitStructInstantiation(StructInstantiationNode *ctx) override { return buildNode(ctx); }
105 std::any visitLambdaFunc(LambdaFuncNode *ctx) override { return buildNode(ctx); }
106
2/4
✓ Branch 0 (2→3) taken 2 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 2 times.
✗ Branch 3 (3→8) not taken.
2 std::any visitLambdaProc(LambdaProcNode *ctx) override { return buildNode(ctx); }
107 std::any visitLambdaExpr(LambdaExprNode *ctx) override { return buildNode(ctx); }
108
2/4
✓ Branch 0 (2→3) taken 43798 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 43798 times.
✗ Branch 3 (3→8) not taken.
43798 std::any visitDataType(DataTypeNode *ctx) override { return buildNode(ctx); }
109
2/4
✓ Branch 0 (2→3) taken 43798 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 43798 times.
✗ Branch 3 (3→8) not taken.
43798 std::any visitBaseDataType(BaseDataTypeNode *ctx) override { return buildNode(ctx); }
110
2/4
✓ Branch 0 (2→3) taken 16649 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 16649 times.
✗ Branch 3 (3→8) not taken.
16649 std::any visitCustomDataType(CustomDataTypeNode *ctx) override { return buildNode(ctx); }
111
2/4
✓ Branch 0 (2→3) taken 44 times.
✗ Branch 1 (2→10) not taken.
✓ Branch 2 (3→4) taken 44 times.
✗ Branch 3 (3→8) not taken.
44 std::any visitFunctionDataType(FunctionDataTypeNode *ctx) override { return buildNode(ctx); }
112
113 private:
114 // Members
115 const std::vector<std::string> nodeNames;
116 std::stack<std::string> parentNodeIds;
117
118 // Private methods
119 template <typename T>
120 1466669 std::string buildNode(const T *node)
121 requires std::is_base_of_v<ASTNode, T>
122 {
123
1/2
✓ Branch 0 (2→3) taken 1466669 times.
✗ Branch 1 (2→72) not taken.
1466669 std::stringstream result;
124
125 // Prepare strings
126
1/2
✓ Branch 0 (4→5) taken 1466669 times.
✗ Branch 1 (4→70) not taken.
1466669 const std::string typeName(CommonUtil::demangleTypeName(typeid(T).name()));
127
1/2
✓ Branch 0 (5→6) taken 1466669 times.
✗ Branch 1 (5→68) not taken.
1466669 const std::string codeLoc = node->codeLoc.toString();
128
2/4
✓ Branch 0 (6→7) taken 1466669 times.
✗ Branch 1 (6→66) not taken.
✓ Branch 2 (7→8) taken 1466669 times.
✗ Branch 3 (7→66) not taken.
1466669 const std::string nodeName = typeName.substr(typeName.rfind("::") + 2);
129
2/4
✓ Branch 0 (8→9) taken 1466669 times.
✗ Branch 1 (8→52) not taken.
✓ Branch 2 (9→10) taken 1466669 times.
✗ Branch 3 (9→50) not taken.
1466669 const std::string nodeId = codeLoc + "_" + nodeName;
130
131 // Build result
132
4/8
✓ Branch 0 (11→12) taken 1466669 times.
✗ Branch 1 (11→62) not taken.
✓ Branch 2 (12→13) taken 1466669 times.
✗ Branch 3 (12→62) not taken.
✓ Branch 4 (13→14) taken 1466669 times.
✗ Branch 5 (13→62) not taken.
✓ Branch 6 (14→15) taken 1466669 times.
✗ Branch 7 (14→62) not taken.
1466669 result << nodeId << R"( [color="lightgreen",label=")" << nodeName << "\"];\n";
133
134 // Link parent node with the current one
135
2/2
✓ Branch 0 (16→17) taken 1465948 times.
✓ Branch 1 (16→23) taken 721 times.
1466669 if (!parentNodeIds.empty())
136
5/10
✓ Branch 0 (17→18) taken 1465948 times.
✗ Branch 1 (17→62) not taken.
✓ Branch 2 (19→20) taken 1465948 times.
✗ Branch 3 (19→62) not taken.
✓ Branch 4 (20→21) taken 1465948 times.
✗ Branch 5 (20→62) not taken.
✓ Branch 6 (21→22) taken 1465948 times.
✗ Branch 7 (21→62) not taken.
✓ Branch 8 (22→23) taken 1465948 times.
✗ Branch 9 (22→62) not taken.
1465948 result << " " << parentNodeIds.top() << " -> " << nodeId << ";\n";
137
138
1/2
✓ Branch 0 (23→24) taken 1466669 times.
✗ Branch 1 (23→62) not taken.
1466669 parentNodeIds.push(nodeId); // Set parentNodeId for children
139
140 // Visit all the children
141
3/4
✓ Branch 0 (24→25) taken 1466669 times.
✗ Branch 1 (24→61) not taken.
✓ Branch 2 (38→27) taken 1465948 times.
✓ Branch 3 (38→39) taken 1466669 times.
2932617 for (ASTNode *child : node->getChildren())
142
1/2
✓ Branch 0 (28→29) taken 1465948 times.
✗ Branch 1 (28→36) not taken.
1465948 if (child != nullptr)
143
4/8
✓ Branch 0 (29→30) taken 1465948 times.
✗ Branch 1 (29→59) not taken.
✓ Branch 2 (30→31) taken 1465948 times.
✗ Branch 3 (30→57) not taken.
✓ Branch 4 (31→32) taken 1465948 times.
✗ Branch 5 (31→55) not taken.
✓ Branch 6 (32→33) taken 1465948 times.
✗ Branch 7 (32→53) not taken.
1465948 result << " " << std::any_cast<std::string>(visit(child));
144
145 // Remove parent node id from the stack
146 1466669 parentNodeIds.pop();
147
148
1/2
✓ Branch 0 (41→42) taken 1466669 times.
✗ Branch 1 (41→62) not taken.
2933338 return result.str();
149 1466669 }
150 };
151
152 } // namespace spice::compiler
153