GCC Code Coverage Report


Directory: ../
File: src/symboltablebuilder/SymbolTableBuilder.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 <CompilerPass.h>
6 #include <ast/ASTVisitor.h>
7
8 namespace spice::compiler {
9
10 const char *const MAIN_FUNCTION_NAME = "main";
11 const char *const RETURN_VARIABLE_NAME = "result";
12 const char *const THIS_VARIABLE_NAME = "this";
13 const char *const FOREACH_DEFAULT_IDX_VARIABLE_NAME = "idx";
14 const char *const CTOR_FUNCTION_NAME = "ctor";
15 const char *const DTOR_FUNCTION_NAME = "dtor";
16 const char *const ALIAS_CONTAINER_SUFFIX = ".container";
17 const char *const STRUCT_SCOPE_PREFIX = "struct:";
18 const char *const INTERFACE_SCOPE_PREFIX = "interface:";
19 const char *const ENUM_SCOPE_PREFIX = "enum:";
20 static constexpr char UNUSED_VARIABLE_NAME = '_';
21
22 /**
23 * Jobs:
24 * - Build symbol table
25 */
26 class SymbolTableBuilder final : CompilerPass, public ASTVisitor {
27 public:
28 // Constructors
29 SymbolTableBuilder(GlobalResourceManager &resourceManager, SourceFile *sourceFile);
30
31 // Public methods
32 std::any visitEntry(EntryNode *node) override;
33 std::any visitMainFctDef(MainFctDefNode *node) override;
34 std::any visitFctDef(FctDefNode *node) override;
35 std::any visitProcDef(ProcDefNode *node) override;
36 std::any visitStructDef(StructDefNode *node) override;
37 std::any visitInterfaceDef(InterfaceDefNode *node) override;
38 std::any visitEnumDef(EnumDefNode *node) override;
39 std::any visitGenericTypeDef(GenericTypeDefNode *node) override;
40 std::any visitAliasDef(AliasDefNode *node) override;
41 std::any visitGlobalVarDef(GlobalVarDefNode *node) override;
42 std::any visitExtDecl(ExtDeclNode *node) override;
43 std::any visitUnsafeBlock(UnsafeBlockNode *node) override;
44 std::any visitForLoop(ForLoopNode *node) override;
45 std::any visitForeachLoop(ForeachLoopNode *node) override;
46 std::any visitWhileLoop(WhileLoopNode *node) override;
47 std::any visitDoWhileLoop(DoWhileLoopNode *node) override;
48 std::any visitIfStmt(IfStmtNode *node) override;
49 std::any visitElseStmt(ElseStmtNode *node) override;
50 std::any visitCaseBranch(CaseBranchNode *node) override;
51 std::any visitDefaultBranch(DefaultBranchNode *node) override;
52 std::any visitAnonymousBlockStmt(AnonymousBlockStmtNode *node) override;
53 std::any visitEnumItem(EnumItemNode *node) override;
54 std::any visitField(FieldNode *node) override;
55 std::any visitSignature(SignatureNode *node) override;
56 std::any visitDeclStmt(DeclStmtNode *node) override;
57 std::any visitModAttr(ModAttrNode *node) override;
58 std::any visitAttr(AttrNode *node) override;
59 std::any visitLambdaFunc(LambdaFuncNode *node) override;
60 std::any visitLambdaProc(LambdaProcNode *node) override;
61 std::any visitLambdaExpr(LambdaExprNode *node) override;
62
63 private:
64 // Private members
65 Scope *rootScope;
66 bool hasMainFunction = false;
67 };
68
69 } // namespace spice::compiler
70