GCC Code Coverage Report


Directory: ../
File: src/ast/AbstractASTVisitor.h
Date: 2025-02-05 01:09:36
Exec Total Coverage
Lines: 0 0 -%
Functions: 0 0 -%
Branches: 0 0 -%

Line Branch Exec Source
1 // Copyright (c) 2021-2025 ChilliBits. All rights reserved.
2
3 #pragma once
4
5 #include <any>
6
7 namespace spice::compiler {
8
9 // Forward declarations
10 class ASTNode;
11 class EntryNode;
12 class MainFctDefNode;
13 class FctNameNode;
14 class FctDefNode;
15 class ProcDefNode;
16 class StructDefNode;
17 class InterfaceDefNode;
18 class EnumDefNode;
19 class GenericTypeDefNode;
20 class AliasDefNode;
21 class GlobalVarDefNode;
22 class ExtDeclNode;
23 class ImportDefNode;
24 class UnsafeBlockNode;
25 class ForLoopNode;
26 class ForeachLoopNode;
27 class WhileLoopNode;
28 class DoWhileLoopNode;
29 class IfStmtNode;
30 class ElseStmtNode;
31 class SwitchStmtNode;
32 class CaseBranchNode;
33 class DefaultBranchNode;
34 class AnonymousBlockStmtNode;
35 class StmtLstNode;
36 class TypeLstNode;
37 class TypeAltsLstNode;
38 class ParamLstNode;
39 class ArgLstNode;
40 class EnumItemLstNode;
41 class EnumItemNode;
42 class FieldNode;
43 class SignatureNode;
44 class DeclStmtNode;
45 class ExprStmtNode;
46 class QualifierLstNode;
47 class QualifierNode;
48 class ModAttrNode;
49 class TopLevelDefinitionAttrNode;
50 class LambdaAttrNode;
51 class AttrLstNode;
52 class AttrNode;
53 class CaseConstantNode;
54 class ReturnStmtNode;
55 class BreakStmtNode;
56 class ContinueStmtNode;
57 class FallthroughStmtNode;
58 class AssertStmtNode;
59 class BuiltinCallNode;
60 class PrintfCallNode;
61 class SizeofCallNode;
62 class AlignofCallNode;
63 class LenCallNode;
64 class PanicCallNode;
65 class SysCallNode;
66 class AssignExprNode;
67 class TernaryExprNode;
68 class LogicalOrExprNode;
69 class LogicalAndExprNode;
70 class BitwiseOrExprNode;
71 class BitwiseXorExprNode;
72 class BitwiseAndExprNode;
73 class EqualityExprNode;
74 class RelationalExprNode;
75 class ShiftExprNode;
76 class AdditiveExprNode;
77 class MultiplicativeExprNode;
78 class CastExprNode;
79 class PrefixUnaryExprNode;
80 class PostfixUnaryExprNode;
81 class AtomicExprNode;
82 class ValueNode;
83 class ConstantNode;
84 class FctCallNode;
85 class ArrayInitializationNode;
86 class StructInstantiationNode;
87 class LambdaFuncNode;
88 class LambdaProcNode;
89 class LambdaExprNode;
90 class DataTypeNode;
91 class BaseDataTypeNode;
92 class CustomDataTypeNode;
93 class FunctionDataTypeNode;
94
95 class AbstractASTVisitor {
96 protected:
97 ~AbstractASTVisitor() = default;
98
99 public:
100 // General visitor method
101 std::any visit(ASTNode *node);
102 std::any visitChildren(ASTNode *node);
103
104 // Visitor methods
105 virtual std::any visitEntry(EntryNode *node) = 0;
106 virtual std::any visitMainFctDef(MainFctDefNode *node) = 0;
107 virtual std::any visitFctDef(FctDefNode *node) = 0;
108 virtual std::any visitProcDef(ProcDefNode *node) = 0;
109 virtual std::any visitFctName(FctNameNode *node) = 0;
110 virtual std::any visitStructDef(StructDefNode *node) = 0;
111 virtual std::any visitInterfaceDef(InterfaceDefNode *node) = 0;
112 virtual std::any visitEnumDef(EnumDefNode *node) = 0;
113 virtual std::any visitGenericTypeDef(GenericTypeDefNode *node) = 0;
114 virtual std::any visitAliasDef(AliasDefNode *node) = 0;
115 virtual std::any visitGlobalVarDef(GlobalVarDefNode *node) = 0;
116 virtual std::any visitExtDecl(ExtDeclNode *node) = 0;
117 virtual std::any visitImportDef(ImportDefNode *node) = 0;
118 virtual std::any visitUnsafeBlock(UnsafeBlockNode *node) = 0;
119 virtual std::any visitForLoop(ForLoopNode *node) = 0;
120 virtual std::any visitForeachLoop(ForeachLoopNode *node) = 0;
121 virtual std::any visitWhileLoop(WhileLoopNode *node) = 0;
122 virtual std::any visitDoWhileLoop(DoWhileLoopNode *node) = 0;
123 virtual std::any visitIfStmt(IfStmtNode *node) = 0;
124 virtual std::any visitElseStmt(ElseStmtNode *node) = 0;
125 virtual std::any visitSwitchStmt(SwitchStmtNode *node) = 0;
126 virtual std::any visitCaseBranch(CaseBranchNode *node) = 0;
127 virtual std::any visitDefaultBranch(DefaultBranchNode *node) = 0;
128 virtual std::any visitAnonymousBlockStmt(AnonymousBlockStmtNode *node) = 0;
129 virtual std::any visitStmtLst(StmtLstNode *node) = 0;
130 virtual std::any visitTypeLst(TypeLstNode *node) = 0;
131 virtual std::any visitTypeAltsLst(TypeAltsLstNode *node) = 0;
132 virtual std::any visitParamLst(ParamLstNode *node) = 0;
133 virtual std::any visitArgLst(ArgLstNode *node) = 0;
134 virtual std::any visitEnumItemLst(EnumItemLstNode *node) = 0;
135 virtual std::any visitEnumItem(EnumItemNode *node) = 0;
136 virtual std::any visitField(FieldNode *node) = 0;
137 virtual std::any visitSignature(SignatureNode *node) = 0;
138 virtual std::any visitDeclStmt(DeclStmtNode *node) = 0;
139 virtual std::any visitExprStmt(ExprStmtNode *node) = 0;
140 virtual std::any visitQualifierLst(QualifierLstNode *node) = 0;
141 virtual std::any visitQualifier(QualifierNode *node) = 0;
142 virtual std::any visitModAttr(ModAttrNode *node) = 0;
143 virtual std::any visitTopLevelDefinitionAttr(TopLevelDefinitionAttrNode *node) = 0;
144 virtual std::any visitLambdaAttr(LambdaAttrNode *node) = 0;
145 virtual std::any visitAttrLst(AttrLstNode *node) = 0;
146 virtual std::any visitAttr(AttrNode *node) = 0;
147 virtual std::any visitCaseConstant(CaseConstantNode *node) = 0;
148 virtual std::any visitReturnStmt(ReturnStmtNode *node) = 0;
149 virtual std::any visitBreakStmt(BreakStmtNode *node) = 0;
150 virtual std::any visitContinueStmt(ContinueStmtNode *node) = 0;
151 virtual std::any visitFallthroughStmt(FallthroughStmtNode *node) = 0;
152 virtual std::any visitAssertStmt(AssertStmtNode *node) = 0;
153 virtual std::any visitBuiltinCall(BuiltinCallNode *node) = 0;
154 virtual std::any visitPrintfCall(PrintfCallNode *node) = 0;
155 virtual std::any visitSizeofCall(SizeofCallNode *node) = 0;
156 virtual std::any visitAlignofCall(AlignofCallNode *node) = 0;
157 virtual std::any visitLenCall(LenCallNode *node) = 0;
158 virtual std::any visitPanicCall(PanicCallNode *node) = 0;
159 virtual std::any visitSysCall(SysCallNode *node) = 0;
160 virtual std::any visitAssignExpr(AssignExprNode *node) = 0;
161 virtual std::any visitTernaryExpr(TernaryExprNode *node) = 0;
162 virtual std::any visitLogicalOrExpr(LogicalOrExprNode *node) = 0;
163 virtual std::any visitLogicalAndExpr(LogicalAndExprNode *node) = 0;
164 virtual std::any visitBitwiseOrExpr(BitwiseOrExprNode *node) = 0;
165 virtual std::any visitBitwiseXorExpr(BitwiseXorExprNode *node) = 0;
166 virtual std::any visitBitwiseAndExpr(BitwiseAndExprNode *node) = 0;
167 virtual std::any visitEqualityExpr(EqualityExprNode *node) = 0;
168 virtual std::any visitRelationalExpr(RelationalExprNode *node) = 0;
169 virtual std::any visitShiftExpr(ShiftExprNode *node) = 0;
170 virtual std::any visitAdditiveExpr(AdditiveExprNode *node) = 0;
171 virtual std::any visitMultiplicativeExpr(MultiplicativeExprNode *node) = 0;
172 virtual std::any visitCastExpr(CastExprNode *node) = 0;
173 virtual std::any visitPrefixUnaryExpr(PrefixUnaryExprNode *node) = 0;
174 virtual std::any visitPostfixUnaryExpr(PostfixUnaryExprNode *node) = 0;
175 virtual std::any visitAtomicExpr(AtomicExprNode *node) = 0;
176 virtual std::any visitValue(ValueNode *node) = 0;
177 virtual std::any visitConstant(ConstantNode *node) = 0;
178 virtual std::any visitFctCall(FctCallNode *node) = 0;
179 virtual std::any visitArrayInitialization(ArrayInitializationNode *node) = 0;
180 virtual std::any visitStructInstantiation(StructInstantiationNode *node) = 0;
181 virtual std::any visitLambdaFunc(LambdaFuncNode *node) = 0;
182 virtual std::any visitLambdaProc(LambdaProcNode *node) = 0;
183 virtual std::any visitLambdaExpr(LambdaExprNode *node) = 0;
184 virtual std::any visitDataType(DataTypeNode *node) = 0;
185 virtual std::any visitBaseDataType(BaseDataTypeNode *node) = 0;
186 virtual std::any visitCustomDataType(CustomDataTypeNode *node) = 0;
187 virtual std::any visitFunctionDataType(FunctionDataTypeNode *node) = 0;
188 };
189
190 } // namespace spice::compiler
191