GCC Code Coverage Report


Directory: ../
File: src/ast/ASTBuilder.h
Date: 2025-10-27 22:48:14
Coverage Exec Excl Total
Lines: 100.0% 521 0 521
Functions: 100.0% 103 0 103
Branches: 54.8% 314 0 573

Line Branch Exec Source
1 // Copyright (c) 2021-2025 ChilliBits. All rights reserved.
2
3 #pragma once
4
5 #include <functional>
6
7 // Ignore some warnings in ANTLR generated code
8 #pragma GCC diagnostic push
9 #pragma GCC diagnostic ignored "-Woverloaded-virtual"
10 #include <SpiceVisitor.h>
11 #pragma GCC diagnostic pop
12
13 #include <CompilerPass.h>
14 #include <global/GlobalResourceManager.h>
15 #include <util/CodeLoc.h>
16 #include <util/GlobalDefinitions.h>
17
18 namespace spice::compiler {
19
20 // Forward declarations
21 class ASTNode;
22 class EntryNode;
23 class ConstantNode;
24
25 static constexpr const char *const RESERVED_KEYWORDS[] = {"new", "stash", "pick", "sync", "class"};
26 const char *const MEMBER_ACCESS_TOKEN = ".";
27 const char *const SCOPE_ACCESS_TOKEN = "::";
28
29 class ASTBuilder final : CompilerPass, public SpiceVisitor {
30 // Private type defs
31 using TerminalNode = antlr4::tree::TerminalNode;
32 using ParserRuleContext = antlr4::ParserRuleContext;
33 template <typename T> using NumericParserCallback = std::function<T(const std::string &, short, bool)>;
34
35 public:
36 // Constructors
37 ASTBuilder(GlobalResourceManager &resourceManager, SourceFile *sourceFile, antlr4::ANTLRInputStream *inputStream);
38
39 // Public methods
40 std::any visitEntry(SpiceParser::EntryContext *ctx) override;
41 std::any visitMainFunctionDef(SpiceParser::MainFunctionDefContext *ctx) override;
42 std::any visitFunctionDef(SpiceParser::FunctionDefContext *ctx) override;
43 std::any visitProcedureDef(SpiceParser::ProcedureDefContext *ctx) override;
44 std::any visitFctName(SpiceParser::FctNameContext *ctx) override;
45 std::any visitGenericTypeDef(SpiceParser::GenericTypeDefContext *ctx) override;
46 std::any visitAliasDef(SpiceParser::AliasDefContext *ctx) override;
47 std::any visitStructDef(SpiceParser::StructDefContext *ctx) override;
48 std::any visitInterfaceDef(SpiceParser::InterfaceDefContext *ctx) override;
49 std::any visitEnumDef(SpiceParser::EnumDefContext *ctx) override;
50 std::any visitGlobalVarDef(SpiceParser::GlobalVarDefContext *ctx) override;
51 std::any visitExtDecl(SpiceParser::ExtDeclContext *ctx) override;
52 std::any visitImportDef(SpiceParser::ImportDefContext *ctx) override;
53 std::any visitUnsafeBlock(SpiceParser::UnsafeBlockContext *ctx) override;
54 std::any visitForLoop(SpiceParser::ForLoopContext *ctx) override;
55 std::any visitForHead(SpiceParser::ForHeadContext *ctx) override;
56 std::any visitForeachLoop(SpiceParser::ForeachLoopContext *ctx) override;
57 std::any visitForeachHead(SpiceParser::ForeachHeadContext *ctx) override;
58 std::any visitWhileLoop(SpiceParser::WhileLoopContext *ctx) override;
59 std::any visitDoWhileLoop(SpiceParser::DoWhileLoopContext *ctx) override;
60 std::any visitIfStmt(SpiceParser::IfStmtContext *ctx) override;
61 std::any visitElseStmt(SpiceParser::ElseStmtContext *ctx) override;
62 std::any visitSwitchStmt(SpiceParser::SwitchStmtContext *ctx) override;
63 std::any visitCaseBranch(SpiceParser::CaseBranchContext *ctx) override;
64 std::any visitDefaultBranch(SpiceParser::DefaultBranchContext *ctx) override;
65 std::any visitAnonymousBlockStmt(SpiceParser::AnonymousBlockStmtContext *ctx) override;
66 std::any visitStmtLst(SpiceParser::StmtLstContext *ctx) override;
67 std::any visitTypeLst(SpiceParser::TypeLstContext *ctx) override;
68 std::any visitTypeLstWithEllipsis(SpiceParser::TypeLstWithEllipsisContext *ctx) override;
69 std::any visitTypeAltsLst(SpiceParser::TypeAltsLstContext *ctx) override;
70 std::any visitParamLst(SpiceParser::ParamLstContext *ctx) override;
71 std::any visitArgLst(SpiceParser::ArgLstContext *ctx) override;
72 std::any visitEnumItemLst(SpiceParser::EnumItemLstContext *ctx) override;
73 std::any visitEnumItem(SpiceParser::EnumItemContext *ctx) override;
74 std::any visitField(SpiceParser::FieldContext *ctx) override;
75 std::any visitSignature(SpiceParser::SignatureContext *ctx) override;
76 std::any visitStmt(SpiceParser::StmtContext *ctx) override;
77 std::any visitDeclStmt(SpiceParser::DeclStmtContext *ctx) override;
78 std::any visitExprStmt(SpiceParser::ExprStmtContext *ctx) override;
79 std::any visitQualifierLst(SpiceParser::QualifierLstContext *ctx) override;
80 std::any visitQualifier(SpiceParser::QualifierContext *ctx) override;
81 std::any visitTopLevelDefAttr(SpiceParser::TopLevelDefAttrContext *ctx) override;
82 std::any visitLambdaAttr(SpiceParser::LambdaAttrContext *ctx) override;
83 std::any visitModAttr(SpiceParser::ModAttrContext *ctx) override;
84 std::any visitAttrLst(SpiceParser::AttrLstContext *ctx) override;
85 std::any visitAttr(SpiceParser::AttrContext *ctx) override;
86 std::any visitCaseConstant(SpiceParser::CaseConstantContext *ctx) override;
87 std::any visitReturnStmt(SpiceParser::ReturnStmtContext *ctx) override;
88 std::any visitBreakStmt(SpiceParser::BreakStmtContext *ctx) override;
89 std::any visitContinueStmt(SpiceParser::ContinueStmtContext *ctx) override;
90 std::any visitFallthroughStmt(SpiceParser::FallthroughStmtContext *ctx) override;
91 std::any visitAssertStmt(SpiceParser::AssertStmtContext *ctx) override;
92 std::any visitBuiltinCall(SpiceParser::BuiltinCallContext *ctx) override;
93 std::any visitPrintfCall(SpiceParser::PrintfCallContext *ctx) override;
94 std::any visitSizeOfCall(SpiceParser::SizeOfCallContext *ctx) override;
95 std::any visitAlignOfCall(SpiceParser::AlignOfCallContext *ctx) override;
96 std::any visitTypeIdCall(SpiceParser::TypeIdCallContext *ctx) override;
97 std::any visitLenCall(SpiceParser::LenCallContext *ctx) override;
98 std::any visitPanicCall(SpiceParser::PanicCallContext *ctx) override;
99 std::any visitSysCall(SpiceParser::SysCallContext *ctx) override;
100 std::any visitAssignExpr(SpiceParser::AssignExprContext *ctx) override;
101 std::any visitTernaryExpr(SpiceParser::TernaryExprContext *ctx) override;
102 std::any visitLogicalOrExpr(SpiceParser::LogicalOrExprContext *ctx) override;
103 std::any visitLogicalAndExpr(SpiceParser::LogicalAndExprContext *ctx) override;
104 std::any visitBitwiseOrExpr(SpiceParser::BitwiseOrExprContext *ctx) override;
105 std::any visitBitwiseXorExpr(SpiceParser::BitwiseXorExprContext *ctx) override;
106 std::any visitBitwiseAndExpr(SpiceParser::BitwiseAndExprContext *ctx) override;
107 std::any visitEqualityExpr(SpiceParser::EqualityExprContext *ctx) override;
108 std::any visitRelationalExpr(SpiceParser::RelationalExprContext *ctx) override;
109 std::any visitShiftExpr(SpiceParser::ShiftExprContext *ctx) override;
110 std::any visitAdditiveExpr(SpiceParser::AdditiveExprContext *ctx) override;
111 std::any visitMultiplicativeExpr(SpiceParser::MultiplicativeExprContext *ctx) override;
112 std::any visitCastExpr(SpiceParser::CastExprContext *ctx) override;
113 std::any visitPrefixUnaryExpr(SpiceParser::PrefixUnaryExprContext *ctx) override;
114 std::any visitPostfixUnaryExpr(SpiceParser::PostfixUnaryExprContext *ctx) override;
115 std::any visitAtomicExpr(SpiceParser::AtomicExprContext *ctx) override;
116 std::any visitValue(SpiceParser::ValueContext *ctx) override;
117 std::any visitFctCall(SpiceParser::FctCallContext *ctx) override;
118 std::any visitArrayInitialization(SpiceParser::ArrayInitializationContext *ctx) override;
119 std::any visitStructInstantiation(SpiceParser::StructInstantiationContext *ctx) override;
120 std::any visitLambdaFunc(SpiceParser::LambdaFuncContext *ctx) override;
121 std::any visitLambdaProc(SpiceParser::LambdaProcContext *ctx) override;
122 std::any visitLambdaExpr(SpiceParser::LambdaExprContext *ctx) override;
123 std::any visitConstant(SpiceParser::ConstantContext *ctx) override;
124 std::any visitDataType(SpiceParser::DataTypeContext *ctx) override;
125 std::any visitBaseDataType(SpiceParser::BaseDataTypeContext *ctx) override;
126 std::any visitCustomDataType(SpiceParser::CustomDataTypeContext *ctx) override;
127 std::any visitFunctionDataType(SpiceParser::FunctionDataTypeContext *ctx) override;
128 std::any visitAssignOp(SpiceParser::AssignOpContext *ctx) override;
129 std::any visitOverloadableOp(SpiceParser::OverloadableOpContext *ctx) override;
130
131 private:
132 // Members
133 antlr4::ANTLRInputStream *inputStream;
134 std::stack<ASTNode *> parentStack;
135
136 // Private methods
137 template <typename SrcTy, typename TgtTy>
138 777337 void fetchChildrenIntoVector(std::vector<TgtTy> &tgt, const std::vector<SrcTy> &src)
139 requires(std::is_pointer_v<SrcTy> && std::is_pointer_v<TgtTy>)
140 {
141 777337 tgt.reserve(src.size());
142
36/36
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::LogicalAndExprContext*, spice::compiler::LogicalAndExprNode*>(std::vector<spice::compiler::LogicalAndExprNode*, std::allocator<spice::compiler::LogicalAndExprNode*> >&, std::vector<spice::compiler::SpiceParser::LogicalAndExprContext*, std::allocator<spice::compiler::SpiceParser::LogicalAndExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::LogicalAndExprContext*>)&&(is_pointer_v<spice::compiler::LogicalAndExprNode*>):
✓ Branch 13 → 6 taken 68031 times.
✓ Branch 13 → 14 taken 66800 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::CaseBranchContext*, spice::compiler::CaseBranchNode*>(std::vector<spice::compiler::CaseBranchNode*, std::allocator<spice::compiler::CaseBranchNode*> >&, std::vector<spice::compiler::SpiceParser::CaseBranchContext*, std::allocator<spice::compiler::SpiceParser::CaseBranchContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::CaseBranchContext*>)&&(is_pointer_v<spice::compiler::CaseBranchNode*>):
✓ Branch 13 → 6 taken 53 times.
✓ Branch 13 → 14 taken 12 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::CaseConstantContext*, spice::compiler::CaseConstantNode*>(std::vector<spice::compiler::CaseConstantNode*, std::allocator<spice::compiler::CaseConstantNode*> >&, std::vector<spice::compiler::SpiceParser::CaseConstantContext*, std::allocator<spice::compiler::SpiceParser::CaseConstantContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::CaseConstantContext*>)&&(is_pointer_v<spice::compiler::CaseConstantNode*>):
✓ Branch 13 → 6 taken 70 times.
✓ Branch 13 → 14 taken 53 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::DataTypeContext*, spice::compiler::DataTypeNode*>(std::vector<spice::compiler::DataTypeNode*, std::allocator<spice::compiler::DataTypeNode*> >&, std::vector<spice::compiler::SpiceParser::DataTypeContext*, std::allocator<spice::compiler::SpiceParser::DataTypeContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::DataTypeContext*>)&&(is_pointer_v<spice::compiler::DataTypeNode*>):
✓ Branch 13 → 6 taken 10780 times.
✓ Branch 13 → 14 taken 7600 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::DeclStmtContext*, spice::compiler::DeclStmtNode*>(std::vector<spice::compiler::DeclStmtNode*, std::allocator<spice::compiler::DeclStmtNode*> >&, std::vector<spice::compiler::SpiceParser::DeclStmtContext*, std::allocator<spice::compiler::SpiceParser::DeclStmtContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::DeclStmtContext*>)&&(is_pointer_v<spice::compiler::DeclStmtNode*>):
✓ Branch 13 → 6 taken 13076 times.
✓ Branch 13 → 14 taken 8690 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::AssignExprContext*, spice::compiler::AssignExprNode*>(std::vector<spice::compiler::AssignExprNode*, std::allocator<spice::compiler::AssignExprNode*> >&, std::vector<spice::compiler::SpiceParser::AssignExprContext*, std::allocator<spice::compiler::SpiceParser::AssignExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::AssignExprContext*>)&&(is_pointer_v<spice::compiler::AssignExprNode*>):
✓ Branch 13 → 6 taken 19423 times.
✓ Branch 13 → 14 taken 13033 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::EnumItemContext*, spice::compiler::EnumItemNode*>(std::vector<spice::compiler::EnumItemNode*, std::allocator<spice::compiler::EnumItemNode*> >&, std::vector<spice::compiler::SpiceParser::EnumItemContext*, std::allocator<spice::compiler::SpiceParser::EnumItemContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::EnumItemContext*>)&&(is_pointer_v<spice::compiler::EnumItemNode*>):
✓ Branch 13 → 6 taken 746 times.
✓ Branch 13 → 14 taken 68 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::QualifierContext*, spice::compiler::QualifierNode*>(std::vector<spice::compiler::QualifierNode*, std::allocator<spice::compiler::QualifierNode*> >&, std::vector<spice::compiler::SpiceParser::QualifierContext*, std::allocator<spice::compiler::SpiceParser::QualifierContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::QualifierContext*>)&&(is_pointer_v<spice::compiler::QualifierNode*>):
✓ Branch 13 → 6 taken 35738 times.
✓ Branch 13 → 14 taken 29588 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::AttrContext*, spice::compiler::AttrNode*>(std::vector<spice::compiler::AttrNode*, std::allocator<spice::compiler::AttrNode*> >&, std::vector<spice::compiler::SpiceParser::AttrContext*, std::allocator<spice::compiler::SpiceParser::AttrContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::AttrContext*>)&&(is_pointer_v<spice::compiler::AttrNode*>):
✓ Branch 13 → 6 taken 1232 times.
✓ Branch 13 → 14 taken 788 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::CastExprContext*, spice::compiler::CastExprNode*>(std::vector<spice::compiler::CastExprNode*, std::allocator<spice::compiler::CastExprNode*> >&, std::vector<spice::compiler::SpiceParser::CastExprContext*, std::allocator<spice::compiler::SpiceParser::CastExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::CastExprContext*>)&&(is_pointer_v<spice::compiler::CastExprNode*>):
✓ Branch 13 → 6 taken 82507 times.
✓ Branch 13 → 14 taken 81244 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::BitwiseOrExprContext*, spice::compiler::BitwiseOrExprNode*>(std::vector<spice::compiler::BitwiseOrExprNode*, std::allocator<spice::compiler::BitwiseOrExprNode*> >&, std::vector<spice::compiler::SpiceParser::BitwiseOrExprContext*, std::allocator<spice::compiler::SpiceParser::BitwiseOrExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::BitwiseOrExprContext*>)&&(is_pointer_v<spice::compiler::BitwiseOrExprNode*>):
✓ Branch 13 → 6 taken 68308 times.
✓ Branch 13 → 14 taken 68029 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::BitwiseXorExprContext*, spice::compiler::BitwiseXorExprNode*>(std::vector<spice::compiler::BitwiseXorExprNode*, std::allocator<spice::compiler::BitwiseXorExprNode*> >&, std::vector<spice::compiler::SpiceParser::BitwiseXorExprContext*, std::allocator<spice::compiler::SpiceParser::BitwiseXorExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::BitwiseXorExprContext*>)&&(is_pointer_v<spice::compiler::BitwiseXorExprNode*>):
✓ Branch 13 → 6 taken 68388 times.
✓ Branch 13 → 14 taken 68306 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::BitwiseAndExprContext*, spice::compiler::BitwiseAndExprNode*>(std::vector<spice::compiler::BitwiseAndExprNode*, std::allocator<spice::compiler::BitwiseAndExprNode*> >&, std::vector<spice::compiler::SpiceParser::BitwiseAndExprContext*, std::allocator<spice::compiler::SpiceParser::BitwiseAndExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::BitwiseAndExprContext*>)&&(is_pointer_v<spice::compiler::BitwiseAndExprNode*>):
✓ Branch 13 → 6 taken 68399 times.
✓ Branch 13 → 14 taken 68386 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::EqualityExprContext*, spice::compiler::EqualityExprNode*>(std::vector<spice::compiler::EqualityExprNode*, std::allocator<spice::compiler::EqualityExprNode*> >&, std::vector<spice::compiler::SpiceParser::EqualityExprContext*, std::allocator<spice::compiler::SpiceParser::EqualityExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::EqualityExprContext*>)&&(is_pointer_v<spice::compiler::EqualityExprNode*>):
✓ Branch 13 → 6 taken 68423 times.
✓ Branch 13 → 14 taken 68397 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::RelationalExprContext*, spice::compiler::RelationalExprNode*>(std::vector<spice::compiler::RelationalExprNode*, std::allocator<spice::compiler::RelationalExprNode*> >&, std::vector<spice::compiler::SpiceParser::RelationalExprContext*, std::allocator<spice::compiler::SpiceParser::RelationalExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::RelationalExprContext*>)&&(is_pointer_v<spice::compiler::RelationalExprNode*>):
✓ Branch 13 → 6 taken 73436 times.
✓ Branch 13 → 14 taken 68421 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::ShiftExprContext*, spice::compiler::ShiftExprNode*>(std::vector<spice::compiler::ShiftExprNode*, std::allocator<spice::compiler::ShiftExprNode*> >&, std::vector<spice::compiler::SpiceParser::ShiftExprContext*, std::allocator<spice::compiler::SpiceParser::ShiftExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::ShiftExprContext*>)&&(is_pointer_v<spice::compiler::ShiftExprNode*>):
✓ Branch 13 → 6 taken 77170 times.
✓ Branch 13 → 14 taken 73434 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::AdditiveExprContext*, spice::compiler::AdditiveExprNode*>(std::vector<spice::compiler::AdditiveExprNode*, std::allocator<spice::compiler::AdditiveExprNode*> >&, std::vector<spice::compiler::SpiceParser::AdditiveExprContext*, std::allocator<spice::compiler::SpiceParser::AdditiveExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::AdditiveExprContext*>)&&(is_pointer_v<spice::compiler::AdditiveExprNode*>):
✓ Branch 13 → 6 taken 77301 times.
✓ Branch 13 → 14 taken 77168 times.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::MultiplicativeExprContext*, spice::compiler::MultiplicativeExprNode*>(std::vector<spice::compiler::MultiplicativeExprNode*, std::allocator<spice::compiler::MultiplicativeExprNode*> >&, std::vector<spice::compiler::SpiceParser::MultiplicativeExprContext*, std::allocator<spice::compiler::SpiceParser::MultiplicativeExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::MultiplicativeExprContext*>)&&(is_pointer_v<spice::compiler::MultiplicativeExprNode*>):
✓ Branch 13 → 6 taken 81246 times.
✓ Branch 13 → 14 taken 77299 times.
1591643 for (SrcTy shiftExpr : src)
143
65/108
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::LogicalAndExprContext*, spice::compiler::LogicalAndExprNode*>(std::vector<spice::compiler::LogicalAndExprNode*, std::allocator<spice::compiler::LogicalAndExprNode*> >&, std::vector<spice::compiler::SpiceParser::LogicalAndExprContext*, std::allocator<spice::compiler::SpiceParser::LogicalAndExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::LogicalAndExprContext*>)&&(is_pointer_v<spice::compiler::LogicalAndExprNode*>):
✓ Branch 7 → 8 taken 68029 times.
✓ Branch 7 → 17 taken 2 times.
✓ Branch 8 → 9 taken 68029 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 68029 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::CaseBranchContext*, spice::compiler::CaseBranchNode*>(std::vector<spice::compiler::CaseBranchNode*, std::allocator<spice::compiler::CaseBranchNode*> >&, std::vector<spice::compiler::SpiceParser::CaseBranchContext*, std::allocator<spice::compiler::SpiceParser::CaseBranchContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::CaseBranchContext*>)&&(is_pointer_v<spice::compiler::CaseBranchNode*>):
✓ Branch 7 → 8 taken 53 times.
✗ Branch 7 → 17 not taken.
✓ Branch 8 → 9 taken 53 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 53 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::CaseConstantContext*, spice::compiler::CaseConstantNode*>(std::vector<spice::compiler::CaseConstantNode*, std::allocator<spice::compiler::CaseConstantNode*> >&, std::vector<spice::compiler::SpiceParser::CaseConstantContext*, std::allocator<spice::compiler::SpiceParser::CaseConstantContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::CaseConstantContext*>)&&(is_pointer_v<spice::compiler::CaseConstantNode*>):
✓ Branch 7 → 8 taken 70 times.
✗ Branch 7 → 17 not taken.
✓ Branch 8 → 9 taken 70 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 70 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::DataTypeContext*, spice::compiler::DataTypeNode*>(std::vector<spice::compiler::DataTypeNode*, std::allocator<spice::compiler::DataTypeNode*> >&, std::vector<spice::compiler::SpiceParser::DataTypeContext*, std::allocator<spice::compiler::SpiceParser::DataTypeContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::DataTypeContext*>)&&(is_pointer_v<spice::compiler::DataTypeNode*>):
✓ Branch 7 → 8 taken 10780 times.
✗ Branch 7 → 17 not taken.
✓ Branch 8 → 9 taken 10780 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 10780 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::DeclStmtContext*, spice::compiler::DeclStmtNode*>(std::vector<spice::compiler::DeclStmtNode*, std::allocator<spice::compiler::DeclStmtNode*> >&, std::vector<spice::compiler::SpiceParser::DeclStmtContext*, std::allocator<spice::compiler::SpiceParser::DeclStmtContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::DeclStmtContext*>)&&(is_pointer_v<spice::compiler::DeclStmtNode*>):
✓ Branch 7 → 8 taken 13076 times.
✗ Branch 7 → 17 not taken.
✓ Branch 8 → 9 taken 13076 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 13076 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::AssignExprContext*, spice::compiler::AssignExprNode*>(std::vector<spice::compiler::AssignExprNode*, std::allocator<spice::compiler::AssignExprNode*> >&, std::vector<spice::compiler::SpiceParser::AssignExprContext*, std::allocator<spice::compiler::SpiceParser::AssignExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::AssignExprContext*>)&&(is_pointer_v<spice::compiler::AssignExprNode*>):
✓ Branch 7 → 8 taken 19423 times.
✗ Branch 7 → 17 not taken.
✓ Branch 8 → 9 taken 19423 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 19423 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::EnumItemContext*, spice::compiler::EnumItemNode*>(std::vector<spice::compiler::EnumItemNode*, std::allocator<spice::compiler::EnumItemNode*> >&, std::vector<spice::compiler::SpiceParser::EnumItemContext*, std::allocator<spice::compiler::SpiceParser::EnumItemContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::EnumItemContext*>)&&(is_pointer_v<spice::compiler::EnumItemNode*>):
✓ Branch 7 → 8 taken 746 times.
✗ Branch 7 → 17 not taken.
✓ Branch 8 → 9 taken 746 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 746 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::QualifierContext*, spice::compiler::QualifierNode*>(std::vector<spice::compiler::QualifierNode*, std::allocator<spice::compiler::QualifierNode*> >&, std::vector<spice::compiler::SpiceParser::QualifierContext*, std::allocator<spice::compiler::SpiceParser::QualifierContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::QualifierContext*>)&&(is_pointer_v<spice::compiler::QualifierNode*>):
✓ Branch 7 → 8 taken 35738 times.
✗ Branch 7 → 17 not taken.
✓ Branch 8 → 9 taken 35738 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 35738 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::AttrContext*, spice::compiler::AttrNode*>(std::vector<spice::compiler::AttrNode*, std::allocator<spice::compiler::AttrNode*> >&, std::vector<spice::compiler::SpiceParser::AttrContext*, std::allocator<spice::compiler::SpiceParser::AttrContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::AttrContext*>)&&(is_pointer_v<spice::compiler::AttrNode*>):
✓ Branch 7 → 8 taken 1231 times.
✓ Branch 7 → 17 taken 1 time.
✓ Branch 8 → 9 taken 1231 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 1231 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::CastExprContext*, spice::compiler::CastExprNode*>(std::vector<spice::compiler::CastExprNode*, std::allocator<spice::compiler::CastExprNode*> >&, std::vector<spice::compiler::SpiceParser::CastExprContext*, std::allocator<spice::compiler::SpiceParser::CastExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::CastExprContext*>)&&(is_pointer_v<spice::compiler::CastExprNode*>):
✓ Branch 7 → 8 taken 82505 times.
✓ Branch 7 → 17 taken 2 times.
✓ Branch 8 → 9 taken 82505 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 82505 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::BitwiseOrExprContext*, spice::compiler::BitwiseOrExprNode*>(std::vector<spice::compiler::BitwiseOrExprNode*, std::allocator<spice::compiler::BitwiseOrExprNode*> >&, std::vector<spice::compiler::SpiceParser::BitwiseOrExprContext*, std::allocator<spice::compiler::SpiceParser::BitwiseOrExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::BitwiseOrExprContext*>)&&(is_pointer_v<spice::compiler::BitwiseOrExprNode*>):
✓ Branch 7 → 8 taken 68306 times.
✓ Branch 7 → 17 taken 2 times.
✓ Branch 8 → 9 taken 68306 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 68306 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::BitwiseXorExprContext*, spice::compiler::BitwiseXorExprNode*>(std::vector<spice::compiler::BitwiseXorExprNode*, std::allocator<spice::compiler::BitwiseXorExprNode*> >&, std::vector<spice::compiler::SpiceParser::BitwiseXorExprContext*, std::allocator<spice::compiler::SpiceParser::BitwiseXorExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::BitwiseXorExprContext*>)&&(is_pointer_v<spice::compiler::BitwiseXorExprNode*>):
✓ Branch 7 → 8 taken 68386 times.
✓ Branch 7 → 17 taken 2 times.
✓ Branch 8 → 9 taken 68386 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 68386 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::BitwiseAndExprContext*, spice::compiler::BitwiseAndExprNode*>(std::vector<spice::compiler::BitwiseAndExprNode*, std::allocator<spice::compiler::BitwiseAndExprNode*> >&, std::vector<spice::compiler::SpiceParser::BitwiseAndExprContext*, std::allocator<spice::compiler::SpiceParser::BitwiseAndExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::BitwiseAndExprContext*>)&&(is_pointer_v<spice::compiler::BitwiseAndExprNode*>):
✓ Branch 7 → 8 taken 68397 times.
✓ Branch 7 → 17 taken 2 times.
✓ Branch 8 → 9 taken 68397 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 68397 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::EqualityExprContext*, spice::compiler::EqualityExprNode*>(std::vector<spice::compiler::EqualityExprNode*, std::allocator<spice::compiler::EqualityExprNode*> >&, std::vector<spice::compiler::SpiceParser::EqualityExprContext*, std::allocator<spice::compiler::SpiceParser::EqualityExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::EqualityExprContext*>)&&(is_pointer_v<spice::compiler::EqualityExprNode*>):
✓ Branch 7 → 8 taken 68421 times.
✓ Branch 7 → 17 taken 2 times.
✓ Branch 8 → 9 taken 68421 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 68421 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::RelationalExprContext*, spice::compiler::RelationalExprNode*>(std::vector<spice::compiler::RelationalExprNode*, std::allocator<spice::compiler::RelationalExprNode*> >&, std::vector<spice::compiler::SpiceParser::RelationalExprContext*, std::allocator<spice::compiler::SpiceParser::RelationalExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::RelationalExprContext*>)&&(is_pointer_v<spice::compiler::RelationalExprNode*>):
✓ Branch 7 → 8 taken 73434 times.
✓ Branch 7 → 17 taken 2 times.
✓ Branch 8 → 9 taken 73434 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 73434 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::ShiftExprContext*, spice::compiler::ShiftExprNode*>(std::vector<spice::compiler::ShiftExprNode*, std::allocator<spice::compiler::ShiftExprNode*> >&, std::vector<spice::compiler::SpiceParser::ShiftExprContext*, std::allocator<spice::compiler::SpiceParser::ShiftExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::ShiftExprContext*>)&&(is_pointer_v<spice::compiler::ShiftExprNode*>):
✓ Branch 7 → 8 taken 77168 times.
✓ Branch 7 → 17 taken 2 times.
✓ Branch 8 → 9 taken 77168 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 77168 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::AdditiveExprContext*, spice::compiler::AdditiveExprNode*>(std::vector<spice::compiler::AdditiveExprNode*, std::allocator<spice::compiler::AdditiveExprNode*> >&, std::vector<spice::compiler::SpiceParser::AdditiveExprContext*, std::allocator<spice::compiler::SpiceParser::AdditiveExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::AdditiveExprContext*>)&&(is_pointer_v<spice::compiler::AdditiveExprNode*>):
✓ Branch 7 → 8 taken 77299 times.
✓ Branch 7 → 17 taken 2 times.
✓ Branch 8 → 9 taken 77299 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 77299 times.
✗ Branch 9 → 15 not taken.
void spice::compiler::ASTBuilder::fetchChildrenIntoVector<spice::compiler::SpiceParser::MultiplicativeExprContext*, spice::compiler::MultiplicativeExprNode*>(std::vector<spice::compiler::MultiplicativeExprNode*, std::allocator<spice::compiler::MultiplicativeExprNode*> >&, std::vector<spice::compiler::SpiceParser::MultiplicativeExprContext*, std::allocator<spice::compiler::SpiceParser::MultiplicativeExprContext*> > const&) requires (is_pointer_v<spice::compiler::SpiceParser::MultiplicativeExprContext*>)&&(is_pointer_v<spice::compiler::MultiplicativeExprNode*>):
✓ Branch 7 → 8 taken 81244 times.
✓ Branch 7 → 17 taken 2 times.
✓ Branch 8 → 9 taken 81244 times.
✗ Branch 8 → 15 not taken.
✓ Branch 9 → 10 taken 81244 times.
✗ Branch 9 → 15 not taken.
814327 tgt.push_back(std::any_cast<TgtTy>(visit(shiftExpr)));
144 777316 }
145
146 template <typename T>
147 1592656 T *createNode(const ParserRuleContext *ctx)
148 requires std::is_base_of_v<ASTNode, T>
149 {
150 // Create the new node
151
85/170
spice::compiler::EnumItemNode* spice::compiler::ASTBuilder::createNode<spice::compiler::EnumItemNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::EnumItemNode>:
✓ Branch 9 → 10 taken 746 times.
✗ Branch 9 → 14 not taken.
spice::compiler::CaseBranchNode* spice::compiler::ASTBuilder::createNode<spice::compiler::CaseBranchNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::CaseBranchNode>:
✓ Branch 9 → 10 taken 53 times.
✗ Branch 9 → 14 not taken.
spice::compiler::DefaultBranchNode* spice::compiler::ASTBuilder::createNode<spice::compiler::DefaultBranchNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::DefaultBranchNode>:
✓ Branch 9 → 10 taken 6 times.
✗ Branch 9 → 14 not taken.
spice::compiler::AnonymousBlockStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AnonymousBlockStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AnonymousBlockStmtNode>:
✓ Branch 9 → 10 taken 30 times.
✗ Branch 9 → 14 not taken.
spice::compiler::StmtLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::StmtLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::StmtLstNode>:
✓ Branch 9 → 10 taken 20779 times.
✗ Branch 9 → 14 not taken.
spice::compiler::TypeLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::TypeLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::TypeLstNode>:
✓ Branch 9 → 10 taken 6703 times.
✗ Branch 9 → 14 not taken.
spice::compiler::TypeLstWithEllipsisNode* spice::compiler::ASTBuilder::createNode<spice::compiler::TypeLstWithEllipsisNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::TypeLstWithEllipsisNode>:
✓ Branch 9 → 10 taken 942 times.
✗ Branch 9 → 14 not taken.
spice::compiler::TypeAltsLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::TypeAltsLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::TypeAltsLstNode>:
✓ Branch 9 → 10 taken 897 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ParamLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ParamLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ParamLstNode>:
✓ Branch 9 → 10 taken 8690 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ArgLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ArgLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ArgLstNode>:
✓ Branch 9 → 10 taken 12218 times.
✗ Branch 9 → 14 not taken.
spice::compiler::EnumItemLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::EnumItemLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::EnumItemLstNode>:
✓ Branch 9 → 10 taken 68 times.
✗ Branch 9 → 14 not taken.
spice::compiler::SwitchStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::SwitchStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::SwitchStmtNode>:
✓ Branch 9 → 10 taken 12 times.
✗ Branch 9 → 14 not taken.
spice::compiler::FieldNode* spice::compiler::ASTBuilder::createNode<spice::compiler::FieldNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::FieldNode>:
✓ Branch 9 → 10 taken 1473 times.
✗ Branch 9 → 14 not taken.
spice::compiler::SignatureNode* spice::compiler::ASTBuilder::createNode<spice::compiler::SignatureNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::SignatureNode>:
✓ Branch 9 → 10 taken 216 times.
✗ Branch 9 → 14 not taken.
spice::compiler::DeclStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::DeclStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::DeclStmtNode>:
✓ Branch 9 → 10 taken 19607 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ExprStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ExprStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ExprStmtNode>:
✓ Branch 9 → 10 taken 13815 times.
✗ Branch 9 → 14 not taken.
spice::compiler::QualifierLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::QualifierLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::QualifierLstNode>:
✓ Branch 9 → 10 taken 29588 times.
✗ Branch 9 → 14 not taken.
spice::compiler::QualifierNode* spice::compiler::ASTBuilder::createNode<spice::compiler::QualifierNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::QualifierNode>:
✓ Branch 9 → 10 taken 35738 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ModAttrNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ModAttrNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ModAttrNode>:
✓ Branch 9 → 10 taken 336 times.
✗ Branch 9 → 14 not taken.
spice::compiler::TopLevelDefinitionAttrNode* spice::compiler::ASTBuilder::createNode<spice::compiler::TopLevelDefinitionAttrNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::TopLevelDefinitionAttrNode>:
✓ Branch 9 → 10 taken 437 times.
✗ Branch 9 → 14 not taken.
spice::compiler::LambdaAttrNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LambdaAttrNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LambdaAttrNode>:
✓ Branch 9 → 10 taken 16 times.
✗ Branch 9 → 14 not taken.
spice::compiler::AttrLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AttrLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AttrLstNode>:
✓ Branch 9 → 10 taken 789 times.
✗ Branch 9 → 14 not taken.
spice::compiler::GlobalVarDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::GlobalVarDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::GlobalVarDefNode>:
✓ Branch 9 → 10 taken 1175 times.
✗ Branch 9 → 14 not taken.
spice::compiler::EntryNode* spice::compiler::ASTBuilder::createNode<spice::compiler::EntryNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::EntryNode>:
✓ Branch 9 → 10 taken 1139 times.
✗ Branch 9 → 13 not taken.
spice::compiler::MainFctDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::MainFctDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::MainFctDefNode>:
✓ Branch 9 → 10 taken 411 times.
✗ Branch 9 → 14 not taken.
spice::compiler::FctDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::FctDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::FctDefNode>:
✓ Branch 9 → 10 taken 7596 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ProcDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ProcDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ProcDefNode>:
✓ Branch 9 → 10 taken 3790 times.
✗ Branch 9 → 14 not taken.
spice::compiler::FctNameNode* spice::compiler::ASTBuilder::createNode<spice::compiler::FctNameNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::FctNameNode>:
✓ Branch 9 → 10 taken 11386 times.
✗ Branch 9 → 14 not taken.
spice::compiler::StructDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::StructDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::StructDefNode>:
✓ Branch 9 → 10 taken 684 times.
✗ Branch 9 → 14 not taken.
spice::compiler::InterfaceDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::InterfaceDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::InterfaceDefNode>:
✓ Branch 9 → 10 taken 95 times.
✗ Branch 9 → 14 not taken.
spice::compiler::EnumDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::EnumDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::EnumDefNode>:
✓ Branch 9 → 10 taken 68 times.
✗ Branch 9 → 14 not taken.
spice::compiler::GenericTypeDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::GenericTypeDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::GenericTypeDefNode>:
✓ Branch 9 → 10 taken 897 times.
✗ Branch 9 → 14 not taken.
spice::compiler::AliasDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AliasDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AliasDefNode>:
✓ Branch 9 → 10 taken 71 times.
✗ Branch 9 → 14 not taken.
spice::compiler::AttrNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AttrNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AttrNode>:
✓ Branch 9 → 10 taken 1232 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ExtDeclNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ExtDeclNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ExtDeclNode>:
✓ Branch 9 → 10 taken 984 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ImportDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ImportDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ImportDefNode>:
✓ Branch 9 → 10 taken 604 times.
✗ Branch 9 → 14 not taken.
spice::compiler::UnsafeBlockNode* spice::compiler::ASTBuilder::createNode<spice::compiler::UnsafeBlockNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::UnsafeBlockNode>:
✓ Branch 9 → 10 taken 2441 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ForLoopNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ForLoopNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ForLoopNode>:
✓ Branch 9 → 10 taken 1313 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ForeachLoopNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ForeachLoopNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ForeachLoopNode>:
✓ Branch 9 → 10 taken 120 times.
✗ Branch 9 → 14 not taken.
spice::compiler::WhileLoopNode* spice::compiler::ASTBuilder::createNode<spice::compiler::WhileLoopNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::WhileLoopNode>:
✓ Branch 9 → 10 taken 746 times.
✗ Branch 9 → 14 not taken.
spice::compiler::DoWhileLoopNode* spice::compiler::ASTBuilder::createNode<spice::compiler::DoWhileLoopNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::DoWhileLoopNode>:
✓ Branch 9 → 10 taken 9 times.
✗ Branch 9 → 14 not taken.
spice::compiler::IfStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::IfStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::IfStmtNode>:
✓ Branch 9 → 10 taken 4055 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ElseStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ElseStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ElseStmtNode>:
✓ Branch 9 → 10 taken 239 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ConstantNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ConstantNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ConstantNode>:
✓ Branch 9 → 10 taken 17362 times.
✗ Branch 9 → 14 not taken.
spice::compiler::EqualityExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::EqualityExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::EqualityExprNode>:
✓ Branch 9 → 10 taken 68423 times.
✗ Branch 9 → 14 not taken.
spice::compiler::RelationalExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::RelationalExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::RelationalExprNode>:
✓ Branch 9 → 10 taken 73436 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ShiftExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ShiftExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ShiftExprNode>:
✓ Branch 9 → 10 taken 77170 times.
✗ Branch 9 → 14 not taken.
spice::compiler::AdditiveExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AdditiveExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AdditiveExprNode>:
✓ Branch 9 → 10 taken 77301 times.
✗ Branch 9 → 14 not taken.
spice::compiler::MultiplicativeExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::MultiplicativeExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::MultiplicativeExprNode>:
✓ Branch 9 → 10 taken 81246 times.
✗ Branch 9 → 14 not taken.
spice::compiler::CastExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::CastExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::CastExprNode>:
✓ Branch 9 → 10 taken 82507 times.
✗ Branch 9 → 14 not taken.
spice::compiler::PrefixUnaryExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::PrefixUnaryExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::PrefixUnaryExprNode>:
✓ Branch 9 → 10 taken 88607 times.
✗ Branch 9 → 14 not taken.
spice::compiler::PostfixUnaryExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::PostfixUnaryExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::PostfixUnaryExprNode>:
✓ Branch 9 → 10 taken 111035 times.
✗ Branch 9 → 14 not taken.
spice::compiler::AtomicExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AtomicExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AtomicExprNode>:
✓ Branch 9 → 10 taken 87365 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ValueNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ValueNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ValueNode>:
✓ Branch 9 → 10 taken 17459 times.
✗ Branch 9 → 14 not taken.
spice::compiler::BitwiseAndExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::BitwiseAndExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::BitwiseAndExprNode>:
✓ Branch 9 → 10 taken 68399 times.
✗ Branch 9 → 14 not taken.
spice::compiler::FctCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::FctCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::FctCallNode>:
✓ Branch 9 → 10 taken 15689 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ArrayInitializationNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ArrayInitializationNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ArrayInitializationNode>:
✓ Branch 9 → 10 taken 70 times.
✗ Branch 9 → 14 not taken.
spice::compiler::StructInstantiationNode* spice::compiler::ASTBuilder::createNode<spice::compiler::StructInstantiationNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::StructInstantiationNode>:
✓ Branch 9 → 10 taken 223 times.
✗ Branch 9 → 14 not taken.
spice::compiler::LambdaFuncNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LambdaFuncNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LambdaFuncNode>:
✓ Branch 9 → 10 taken 12 times.
✗ Branch 9 → 14 not taken.
spice::compiler::LambdaProcNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LambdaProcNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LambdaProcNode>:
✓ Branch 9 → 10 taken 27 times.
✗ Branch 9 → 14 not taken.
spice::compiler::LambdaExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LambdaExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LambdaExprNode>:
✓ Branch 9 → 10 taken 1 time.
✗ Branch 9 → 14 not taken.
spice::compiler::DataTypeNode* spice::compiler::ASTBuilder::createNode<spice::compiler::DataTypeNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::DataTypeNode>:
✓ Branch 9 → 10 taken 45816 times.
✗ Branch 9 → 14 not taken.
spice::compiler::BaseDataTypeNode* spice::compiler::ASTBuilder::createNode<spice::compiler::BaseDataTypeNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::BaseDataTypeNode>:
✓ Branch 9 → 10 taken 45815 times.
✗ Branch 9 → 14 not taken.
spice::compiler::CustomDataTypeNode* spice::compiler::ASTBuilder::createNode<spice::compiler::CustomDataTypeNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::CustomDataTypeNode>:
✓ Branch 9 → 10 taken 17272 times.
✗ Branch 9 → 14 not taken.
spice::compiler::TypeidCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::TypeidCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::TypeidCallNode>:
✓ Branch 9 → 10 taken 2 times.
✗ Branch 9 → 14 not taken.
spice::compiler::CaseConstantNode* spice::compiler::ASTBuilder::createNode<spice::compiler::CaseConstantNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::CaseConstantNode>:
✓ Branch 9 → 10 taken 70 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ReturnStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ReturnStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ReturnStmtNode>:
✓ Branch 9 → 10 taken 9187 times.
✗ Branch 9 → 14 not taken.
spice::compiler::BreakStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::BreakStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::BreakStmtNode>:
✓ Branch 9 → 10 taken 111 times.
✗ Branch 9 → 14 not taken.
spice::compiler::ContinueStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ContinueStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ContinueStmtNode>:
✓ Branch 9 → 10 taken 191 times.
✗ Branch 9 → 14 not taken.
spice::compiler::FallthroughStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::FallthroughStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::FallthroughStmtNode>:
✓ Branch 9 → 10 taken 6 times.
✗ Branch 9 → 14 not taken.
spice::compiler::AssertStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AssertStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AssertStmtNode>:
✓ Branch 9 → 10 taken 706 times.
✗ Branch 9 → 14 not taken.
spice::compiler::BuiltinCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::BuiltinCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::BuiltinCallNode>:
✓ Branch 9 → 10 taken 2128 times.
✗ Branch 9 → 14 not taken.
spice::compiler::PrintfCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::PrintfCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::PrintfCallNode>:
✓ Branch 9 → 10 taken 814 times.
✗ Branch 9 → 14 not taken.
spice::compiler::SizeofCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::SizeofCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::SizeofCallNode>:
✓ Branch 9 → 10 taken 253 times.
✗ Branch 9 → 14 not taken.
spice::compiler::AlignofCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AlignofCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AlignofCallNode>:
✓ Branch 9 → 10 taken 11 times.
✗ Branch 9 → 14 not taken.
spice::compiler::FunctionDataTypeNode* spice::compiler::ASTBuilder::createNode<spice::compiler::FunctionDataTypeNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::FunctionDataTypeNode>:
✓ Branch 9 → 10 taken 88 times.
✗ Branch 9 → 14 not taken.
spice::compiler::LenCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LenCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LenCallNode>:
✓ Branch 9 → 10 taken 125 times.
✗ Branch 9 → 14 not taken.
spice::compiler::PanicCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::PanicCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::PanicCallNode>:
✓ Branch 9 → 10 taken 922 times.
✗ Branch 9 → 14 not taken.
spice::compiler::SysCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::SysCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::SysCallNode>:
✓ Branch 9 → 10 taken 1 time.
✗ Branch 9 → 14 not taken.
spice::compiler::AssignExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AssignExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AssignExprNode>:
✓ Branch 9 → 10 taken 73146 times.
✗ Branch 9 → 14 not taken.
spice::compiler::TernaryExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::TernaryExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::TernaryExprNode>:
✓ Branch 9 → 10 taken 65917 times.
✗ Branch 9 → 14 not taken.
spice::compiler::LogicalOrExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LogicalOrExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LogicalOrExprNode>:
✓ Branch 9 → 10 taken 66802 times.
✗ Branch 9 → 14 not taken.
spice::compiler::LogicalAndExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LogicalAndExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LogicalAndExprNode>:
✓ Branch 9 → 10 taken 68031 times.
✗ Branch 9 → 14 not taken.
spice::compiler::BitwiseOrExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::BitwiseOrExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::BitwiseOrExprNode>:
✓ Branch 9 → 10 taken 68308 times.
✗ Branch 9 → 14 not taken.
spice::compiler::BitwiseXorExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::BitwiseXorExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::BitwiseXorExprNode>:
✓ Branch 9 → 10 taken 68388 times.
✗ Branch 9 → 14 not taken.
1592656 T *node = resourceManager.astNodeAlloc.allocate<T>(getCodeLoc(ctx));
152 if constexpr (!std::is_same_v<T, EntryNode>)
153 1591517 node->parent = parentStack.top();
154 // This node is the parent for its children
155
85/170
spice::compiler::EnumItemNode* spice::compiler::ASTBuilder::createNode<spice::compiler::EnumItemNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::EnumItemNode>:
✓ Branch 11 → 12 taken 746 times.
✗ Branch 11 → 15 not taken.
spice::compiler::CaseBranchNode* spice::compiler::ASTBuilder::createNode<spice::compiler::CaseBranchNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::CaseBranchNode>:
✓ Branch 11 → 12 taken 53 times.
✗ Branch 11 → 15 not taken.
spice::compiler::DefaultBranchNode* spice::compiler::ASTBuilder::createNode<spice::compiler::DefaultBranchNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::DefaultBranchNode>:
✓ Branch 11 → 12 taken 6 times.
✗ Branch 11 → 15 not taken.
spice::compiler::AnonymousBlockStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AnonymousBlockStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AnonymousBlockStmtNode>:
✓ Branch 11 → 12 taken 30 times.
✗ Branch 11 → 15 not taken.
spice::compiler::StmtLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::StmtLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::StmtLstNode>:
✓ Branch 11 → 12 taken 20779 times.
✗ Branch 11 → 15 not taken.
spice::compiler::TypeLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::TypeLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::TypeLstNode>:
✓ Branch 11 → 12 taken 6703 times.
✗ Branch 11 → 15 not taken.
spice::compiler::TypeLstWithEllipsisNode* spice::compiler::ASTBuilder::createNode<spice::compiler::TypeLstWithEllipsisNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::TypeLstWithEllipsisNode>:
✓ Branch 11 → 12 taken 942 times.
✗ Branch 11 → 15 not taken.
spice::compiler::TypeAltsLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::TypeAltsLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::TypeAltsLstNode>:
✓ Branch 11 → 12 taken 897 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ParamLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ParamLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ParamLstNode>:
✓ Branch 11 → 12 taken 8690 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ArgLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ArgLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ArgLstNode>:
✓ Branch 11 → 12 taken 12218 times.
✗ Branch 11 → 15 not taken.
spice::compiler::EnumItemLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::EnumItemLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::EnumItemLstNode>:
✓ Branch 11 → 12 taken 68 times.
✗ Branch 11 → 15 not taken.
spice::compiler::SwitchStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::SwitchStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::SwitchStmtNode>:
✓ Branch 11 → 12 taken 12 times.
✗ Branch 11 → 15 not taken.
spice::compiler::FieldNode* spice::compiler::ASTBuilder::createNode<spice::compiler::FieldNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::FieldNode>:
✓ Branch 11 → 12 taken 1473 times.
✗ Branch 11 → 15 not taken.
spice::compiler::SignatureNode* spice::compiler::ASTBuilder::createNode<spice::compiler::SignatureNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::SignatureNode>:
✓ Branch 11 → 12 taken 216 times.
✗ Branch 11 → 15 not taken.
spice::compiler::DeclStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::DeclStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::DeclStmtNode>:
✓ Branch 11 → 12 taken 19607 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ExprStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ExprStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ExprStmtNode>:
✓ Branch 11 → 12 taken 13815 times.
✗ Branch 11 → 15 not taken.
spice::compiler::QualifierLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::QualifierLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::QualifierLstNode>:
✓ Branch 11 → 12 taken 29588 times.
✗ Branch 11 → 15 not taken.
spice::compiler::QualifierNode* spice::compiler::ASTBuilder::createNode<spice::compiler::QualifierNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::QualifierNode>:
✓ Branch 11 → 12 taken 35738 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ModAttrNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ModAttrNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ModAttrNode>:
✓ Branch 11 → 12 taken 336 times.
✗ Branch 11 → 15 not taken.
spice::compiler::TopLevelDefinitionAttrNode* spice::compiler::ASTBuilder::createNode<spice::compiler::TopLevelDefinitionAttrNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::TopLevelDefinitionAttrNode>:
✓ Branch 11 → 12 taken 437 times.
✗ Branch 11 → 15 not taken.
spice::compiler::LambdaAttrNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LambdaAttrNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LambdaAttrNode>:
✓ Branch 11 → 12 taken 16 times.
✗ Branch 11 → 15 not taken.
spice::compiler::AttrLstNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AttrLstNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AttrLstNode>:
✓ Branch 11 → 12 taken 789 times.
✗ Branch 11 → 15 not taken.
spice::compiler::GlobalVarDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::GlobalVarDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::GlobalVarDefNode>:
✓ Branch 11 → 12 taken 1175 times.
✗ Branch 11 → 15 not taken.
spice::compiler::EntryNode* spice::compiler::ASTBuilder::createNode<spice::compiler::EntryNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::EntryNode>:
✓ Branch 10 → 11 taken 1139 times.
✗ Branch 10 → 14 not taken.
spice::compiler::MainFctDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::MainFctDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::MainFctDefNode>:
✓ Branch 11 → 12 taken 411 times.
✗ Branch 11 → 15 not taken.
spice::compiler::FctDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::FctDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::FctDefNode>:
✓ Branch 11 → 12 taken 7596 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ProcDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ProcDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ProcDefNode>:
✓ Branch 11 → 12 taken 3790 times.
✗ Branch 11 → 15 not taken.
spice::compiler::FctNameNode* spice::compiler::ASTBuilder::createNode<spice::compiler::FctNameNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::FctNameNode>:
✓ Branch 11 → 12 taken 11386 times.
✗ Branch 11 → 15 not taken.
spice::compiler::StructDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::StructDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::StructDefNode>:
✓ Branch 11 → 12 taken 684 times.
✗ Branch 11 → 15 not taken.
spice::compiler::InterfaceDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::InterfaceDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::InterfaceDefNode>:
✓ Branch 11 → 12 taken 95 times.
✗ Branch 11 → 15 not taken.
spice::compiler::EnumDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::EnumDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::EnumDefNode>:
✓ Branch 11 → 12 taken 68 times.
✗ Branch 11 → 15 not taken.
spice::compiler::GenericTypeDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::GenericTypeDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::GenericTypeDefNode>:
✓ Branch 11 → 12 taken 897 times.
✗ Branch 11 → 15 not taken.
spice::compiler::AliasDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AliasDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AliasDefNode>:
✓ Branch 11 → 12 taken 71 times.
✗ Branch 11 → 15 not taken.
spice::compiler::AttrNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AttrNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AttrNode>:
✓ Branch 11 → 12 taken 1232 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ExtDeclNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ExtDeclNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ExtDeclNode>:
✓ Branch 11 → 12 taken 984 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ImportDefNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ImportDefNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ImportDefNode>:
✓ Branch 11 → 12 taken 604 times.
✗ Branch 11 → 15 not taken.
spice::compiler::UnsafeBlockNode* spice::compiler::ASTBuilder::createNode<spice::compiler::UnsafeBlockNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::UnsafeBlockNode>:
✓ Branch 11 → 12 taken 2441 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ForLoopNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ForLoopNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ForLoopNode>:
✓ Branch 11 → 12 taken 1313 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ForeachLoopNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ForeachLoopNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ForeachLoopNode>:
✓ Branch 11 → 12 taken 120 times.
✗ Branch 11 → 15 not taken.
spice::compiler::WhileLoopNode* spice::compiler::ASTBuilder::createNode<spice::compiler::WhileLoopNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::WhileLoopNode>:
✓ Branch 11 → 12 taken 746 times.
✗ Branch 11 → 15 not taken.
spice::compiler::DoWhileLoopNode* spice::compiler::ASTBuilder::createNode<spice::compiler::DoWhileLoopNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::DoWhileLoopNode>:
✓ Branch 11 → 12 taken 9 times.
✗ Branch 11 → 15 not taken.
spice::compiler::IfStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::IfStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::IfStmtNode>:
✓ Branch 11 → 12 taken 4055 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ElseStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ElseStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ElseStmtNode>:
✓ Branch 11 → 12 taken 239 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ConstantNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ConstantNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ConstantNode>:
✓ Branch 11 → 12 taken 17362 times.
✗ Branch 11 → 15 not taken.
spice::compiler::EqualityExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::EqualityExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::EqualityExprNode>:
✓ Branch 11 → 12 taken 68423 times.
✗ Branch 11 → 15 not taken.
spice::compiler::RelationalExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::RelationalExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::RelationalExprNode>:
✓ Branch 11 → 12 taken 73436 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ShiftExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ShiftExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ShiftExprNode>:
✓ Branch 11 → 12 taken 77170 times.
✗ Branch 11 → 15 not taken.
spice::compiler::AdditiveExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AdditiveExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AdditiveExprNode>:
✓ Branch 11 → 12 taken 77301 times.
✗ Branch 11 → 15 not taken.
spice::compiler::MultiplicativeExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::MultiplicativeExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::MultiplicativeExprNode>:
✓ Branch 11 → 12 taken 81246 times.
✗ Branch 11 → 15 not taken.
spice::compiler::CastExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::CastExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::CastExprNode>:
✓ Branch 11 → 12 taken 82507 times.
✗ Branch 11 → 15 not taken.
spice::compiler::PrefixUnaryExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::PrefixUnaryExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::PrefixUnaryExprNode>:
✓ Branch 11 → 12 taken 88607 times.
✗ Branch 11 → 15 not taken.
spice::compiler::PostfixUnaryExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::PostfixUnaryExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::PostfixUnaryExprNode>:
✓ Branch 11 → 12 taken 111035 times.
✗ Branch 11 → 15 not taken.
spice::compiler::AtomicExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AtomicExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AtomicExprNode>:
✓ Branch 11 → 12 taken 87365 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ValueNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ValueNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ValueNode>:
✓ Branch 11 → 12 taken 17459 times.
✗ Branch 11 → 15 not taken.
spice::compiler::BitwiseAndExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::BitwiseAndExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::BitwiseAndExprNode>:
✓ Branch 11 → 12 taken 68399 times.
✗ Branch 11 → 15 not taken.
spice::compiler::FctCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::FctCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::FctCallNode>:
✓ Branch 11 → 12 taken 15689 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ArrayInitializationNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ArrayInitializationNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ArrayInitializationNode>:
✓ Branch 11 → 12 taken 70 times.
✗ Branch 11 → 15 not taken.
spice::compiler::StructInstantiationNode* spice::compiler::ASTBuilder::createNode<spice::compiler::StructInstantiationNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::StructInstantiationNode>:
✓ Branch 11 → 12 taken 223 times.
✗ Branch 11 → 15 not taken.
spice::compiler::LambdaFuncNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LambdaFuncNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LambdaFuncNode>:
✓ Branch 11 → 12 taken 12 times.
✗ Branch 11 → 15 not taken.
spice::compiler::LambdaProcNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LambdaProcNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LambdaProcNode>:
✓ Branch 11 → 12 taken 27 times.
✗ Branch 11 → 15 not taken.
spice::compiler::LambdaExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LambdaExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LambdaExprNode>:
✓ Branch 11 → 12 taken 1 time.
✗ Branch 11 → 15 not taken.
spice::compiler::DataTypeNode* spice::compiler::ASTBuilder::createNode<spice::compiler::DataTypeNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::DataTypeNode>:
✓ Branch 11 → 12 taken 45816 times.
✗ Branch 11 → 15 not taken.
spice::compiler::BaseDataTypeNode* spice::compiler::ASTBuilder::createNode<spice::compiler::BaseDataTypeNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::BaseDataTypeNode>:
✓ Branch 11 → 12 taken 45815 times.
✗ Branch 11 → 15 not taken.
spice::compiler::CustomDataTypeNode* spice::compiler::ASTBuilder::createNode<spice::compiler::CustomDataTypeNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::CustomDataTypeNode>:
✓ Branch 11 → 12 taken 17272 times.
✗ Branch 11 → 15 not taken.
spice::compiler::TypeidCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::TypeidCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::TypeidCallNode>:
✓ Branch 11 → 12 taken 2 times.
✗ Branch 11 → 15 not taken.
spice::compiler::CaseConstantNode* spice::compiler::ASTBuilder::createNode<spice::compiler::CaseConstantNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::CaseConstantNode>:
✓ Branch 11 → 12 taken 70 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ReturnStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ReturnStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ReturnStmtNode>:
✓ Branch 11 → 12 taken 9187 times.
✗ Branch 11 → 15 not taken.
spice::compiler::BreakStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::BreakStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::BreakStmtNode>:
✓ Branch 11 → 12 taken 111 times.
✗ Branch 11 → 15 not taken.
spice::compiler::ContinueStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::ContinueStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::ContinueStmtNode>:
✓ Branch 11 → 12 taken 191 times.
✗ Branch 11 → 15 not taken.
spice::compiler::FallthroughStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::FallthroughStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::FallthroughStmtNode>:
✓ Branch 11 → 12 taken 6 times.
✗ Branch 11 → 15 not taken.
spice::compiler::AssertStmtNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AssertStmtNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AssertStmtNode>:
✓ Branch 11 → 12 taken 706 times.
✗ Branch 11 → 15 not taken.
spice::compiler::BuiltinCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::BuiltinCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::BuiltinCallNode>:
✓ Branch 11 → 12 taken 2128 times.
✗ Branch 11 → 15 not taken.
spice::compiler::PrintfCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::PrintfCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::PrintfCallNode>:
✓ Branch 11 → 12 taken 814 times.
✗ Branch 11 → 15 not taken.
spice::compiler::SizeofCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::SizeofCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::SizeofCallNode>:
✓ Branch 11 → 12 taken 253 times.
✗ Branch 11 → 15 not taken.
spice::compiler::AlignofCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AlignofCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AlignofCallNode>:
✓ Branch 11 → 12 taken 11 times.
✗ Branch 11 → 15 not taken.
spice::compiler::FunctionDataTypeNode* spice::compiler::ASTBuilder::createNode<spice::compiler::FunctionDataTypeNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::FunctionDataTypeNode>:
✓ Branch 11 → 12 taken 88 times.
✗ Branch 11 → 15 not taken.
spice::compiler::LenCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LenCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LenCallNode>:
✓ Branch 11 → 12 taken 125 times.
✗ Branch 11 → 15 not taken.
spice::compiler::PanicCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::PanicCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::PanicCallNode>:
✓ Branch 11 → 12 taken 922 times.
✗ Branch 11 → 15 not taken.
spice::compiler::SysCallNode* spice::compiler::ASTBuilder::createNode<spice::compiler::SysCallNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::SysCallNode>:
✓ Branch 11 → 12 taken 1 time.
✗ Branch 11 → 15 not taken.
spice::compiler::AssignExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::AssignExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::AssignExprNode>:
✓ Branch 11 → 12 taken 73146 times.
✗ Branch 11 → 15 not taken.
spice::compiler::TernaryExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::TernaryExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::TernaryExprNode>:
✓ Branch 11 → 12 taken 65917 times.
✗ Branch 11 → 15 not taken.
spice::compiler::LogicalOrExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LogicalOrExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LogicalOrExprNode>:
✓ Branch 11 → 12 taken 66802 times.
✗ Branch 11 → 15 not taken.
spice::compiler::LogicalAndExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::LogicalAndExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::LogicalAndExprNode>:
✓ Branch 11 → 12 taken 68031 times.
✗ Branch 11 → 15 not taken.
spice::compiler::BitwiseOrExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::BitwiseOrExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::BitwiseOrExprNode>:
✓ Branch 11 → 12 taken 68308 times.
✗ Branch 11 → 15 not taken.
spice::compiler::BitwiseXorExprNode* spice::compiler::ASTBuilder::createNode<spice::compiler::BitwiseXorExprNode>(antlr4::ParserRuleContext const*) requires is_base_of_v<spice::compiler::ASTNode, spice::compiler::BitwiseXorExprNode>:
✓ Branch 11 → 12 taken 68388 times.
✗ Branch 11 → 15 not taken.
1592656 parentStack.push(node);
156 1592656 return node;
157 }
158
159 template <typename T>
160 ALWAYS_INLINE T *resumeForExpansion() const
161 requires std::is_base_of_v<ASTNode, T>
162 {
163
1/2
✓ Branch 3 → 4 taken 10546 times.
✗ Branch 3 → 5 not taken.
21092 return spice_pointer_cast<T *>(parentStack.top());
164 }
165
166 template <typename T>
167 ALWAYS_INLINE T *concludeNode(T *node)
168 requires std::is_base_of_v<ASTNode, T>
169 {
170 // This node is no longer the parent for its children
171
38/76
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 6 times.
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 9 taken 348375 times.
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 10 taken 17776 times.
✗ Branch 9 → 10 not taken.
✓ Branch 9 → 11 taken 13160 times.
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 10743 times.
✗ Branch 12 → 13 not taken.
✓ Branch 12 → 14 taken 1652 times.
✗ Branch 13 → 14 not taken.
✓ Branch 13 → 15 taken 78159 times.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 351 times.
✗ Branch 15 → 16 not taken.
✓ Branch 15 → 17 taken 815 times.
✗ Branch 16 → 17 not taken.
✓ Branch 16 → 18 taken 1211 times.
✗ Branch 17 → 18 not taken.
✓ Branch 17 → 19 taken 604 times.
✗ Branch 18 → 19 not taken.
✓ Branch 18 → 20 taken 12 times.
✗ Branch 19 → 20 not taken.
✓ Branch 19 → 21 taken 98355 times.
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 22 taken 83978 times.
✗ Branch 22 → 23 not taken.
✓ Branch 22 → 24 taken 434 times.
✗ Branch 24 → 25 not taken.
✓ Branch 24 → 26 taken 71 times.
✗ Branch 26 → 27 not taken.
✓ Branch 26 → 28 taken 102811 times.
✗ Branch 29 → 30 not taken.
✓ Branch 29 → 31 taken 77299 times.
✗ Branch 30 → 31 not taken.
✓ Branch 30 → 32 taken 77301 times.
✗ Branch 34 → 35 not taken.
✓ Branch 34 → 36 taken 116982 times.
✗ Branch 37 → 38 not taken.
✓ Branch 37 → 39 taken 77168 times.
✗ Branch 38 → 39 not taken.
✓ Branch 38 → 40 taken 111033 times.
✗ Branch 40 → 41 not taken.
✓ Branch 40 → 42 taken 106861 times.
✗ Branch 46 → 47 not taken.
✓ Branch 46 → 48 taken 45815 times.
✗ Branch 47 → 48 not taken.
✓ Branch 47 → 49 taken 4013 times.
✗ Branch 48 → 49 not taken.
✓ Branch 48 → 50 taken 17360 times.
✗ Branch 50 → 51 not taken.
✓ Branch 50 → 52 taken 70 times.
✗ Branch 51 → 52 not taken.
✓ Branch 51 → 53 taken 7596 times.
✗ Branch 52 → 53 not taken.
✓ Branch 52 → 54 taken 1231 times.
✗ Branch 53 → 54 not taken.
✓ Branch 53 → 55 taken 15689 times.
✗ Branch 54 → 55 not taken.
✓ Branch 54 → 56 taken 19587 times.
✗ Branch 63 → 64 not taken.
✓ Branch 63 → 65 taken 45815 times.
✗ Branch 64 → 65 not taken.
✓ Branch 64 → 66 taken 216 times.
✗ Branch 68 → 69 not taken.
✓ Branch 68 → 70 taken 95 times.
✗ Branch 78 → 79 not taken.
✓ Branch 78 → 80 taken 683 times.
✗ Branch 80 → 81 not taken.
✓ Branch 80 → 82 taken 87363 times.
✗ Branch 107 → 108 not taken.
✓ Branch 107 → 109 taken 20775 times.
✗ Branch 129 → 130 not taken.
✓ Branch 129 → 131 taken 1133 times.
1592598 assert(parentStack.top() == node);
172 1592598 parentStack.pop();
173 1592598 return node;
174 }
175
176 ALWAYS_INLINE CodeLoc getCodeLoc(const ParserRuleContext *ctx) const {
177
1/3
✓ Branch 2 → 3 taken 1592656 times.
✗ Branch 2 → 13 not taken.
✗ Branch 2 → 14 not taken.
1592656 const size_t startIdx = ctx->start->getStartIndex();
178
2/5
✓ Branch 3 → 4 taken 1592656 times.
✗ Branch 3 → 6 not taken.
✓ Branch 4 → 5 taken 1592656 times.
✗ Branch 4 → 13 not taken.
✗ Branch 4 → 14 not taken.
1592656 const size_t stopIdx = ctx->stop ? ctx->stop->getStopIndex() : startIdx;
179
1/3
✓ Branch 7 → 8 taken 1592656 times.
✗ Branch 7 → 13 not taken.
✗ Branch 7 → 14 not taken.
1592656 return {ctx->start, startIdx, stopIdx, sourceFile};
180 }
181
182 int32_t parseInt(TerminalNode *terminal);
183 int16_t parseShort(TerminalNode *terminal);
184 int64_t parseLong(TerminalNode *terminal);
185 int8_t parseChar(TerminalNode *terminal) const;
186 static std::string parseString(std::string input);
187 template <typename T> T parseNumeric(TerminalNode *terminal, const NumericParserCallback<T> &cb);
188 static void replaceEscapeChars(std::string &input);
189 std::string getIdentifier(TerminalNode *terminal, bool isTypeIdentifier) const;
190 };
191
192 } // namespace spice::compiler
193