GCC Code Coverage Report


Directory: ../
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 20 / 0 / 20
Functions: 100.0% 4 / 0 / 4
Branches: 57.1% 8 / 0 / 14

src/CompilerPass.cpp
Line Branch Exec Source
1 // Copyright (c) 2021-2026 ChilliBits. All rights reserved.
2
3 #include "CompilerPass.h"
4
5 #include <SourceFile.h>
6 #include <global/GlobalResourceManager.h>
7 #include <symboltablebuilder/Scope.h>
8
9 namespace spice::compiler {
10
11 17028 CompilerPass::CompilerPass(GlobalResourceManager &resourceManager, SourceFile *sourceFile)
12 17028 : resourceManager(resourceManager), cliOptions(resourceManager.cliOptions), sourceFile(sourceFile),
13
2/2
✓ Branch 2 → 3 taken 17027 times.
✓ Branch 2 → 4 taken 1 time.
17028 rootScope(sourceFile != nullptr ? sourceFile->globalScope.get() : nullptr), currentScope(rootScope) {}
14
15 /**
16 * Change to the passed scope.
17 * For nested scopes in generic functions/procedures it is important to have the right parent for symbol lookups
18 * Therefore, changeToScope sets the children's parent to the old scope to always have the right parent
19 *
20 * @param scope Scope to change to
21 * @param scopeType Expected type of the given scope
22 */
23 57919 void CompilerPass::changeToScope(Scope *scope, [[maybe_unused]] ScopeType scopeType) {
24
1/2
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 57919 times.
57919 assert(scope != nullptr);
25
1/2
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 57919 times.
57919 assert(scope->type == scopeType);
26
1/2
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 57919 times.
57919 assert(!scope->isGenericScope);
27 // Adjust members of the new scope
28 57919 scope->parent = currentScope;
29 57919 scope->symbolTable.parent = &currentScope->symbolTable;
30 // Set the scope
31 57919 currentScope = scope;
32 57919 }
33
34 /**
35 * Change to the scope with the given name.
36 *
37 * @param scopeName Name of the scope to change to
38 * @param scopeType Expected type of the given scope
39 */
40 10303 void CompilerPass::changeToScope(const std::string &scopeName, ScopeType scopeType) {
41
1/2
✗ Branch 3 → 4 not taken.
✓ Branch 3 → 5 taken 10303 times.
10303 assert(!scopeName.empty());
42 10303 changeToScope(currentScope->getChildScope(scopeName), scopeType);
43 10303 }
44
45 /**
46 * Change to the parent scope of the current.
47 *
48 * @param oldScopeType Expected type of the scope to leave
49 */
50 27760 void CompilerPass::changeToParentScope([[maybe_unused]] ScopeType oldScopeType) {
51
1/2
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 27760 times.
27760 assert(currentScope->type == oldScopeType);
52
1/2
✗ Branch 6 → 7 not taken.
✓ Branch 6 → 8 taken 27760 times.
55520 assert(!currentScope->isRootScope());
53 27760 currentScope = currentScope->parent;
54 27760 }
55
56 } // namespace spice::compiler
57