aboutsummaryrefslogtreecommitdiff
path: root/src/semantic/scope.cpp
diff options
context:
space:
mode:
authorCori Barker <coribarker2@gmail.com>2026-02-09 11:05:11 +0000
committerCori Barker <coribarker2@gmail.com>2026-02-09 11:05:11 +0000
commita7b36237d7c703c96b6a22c11cf37045d999fcc6 (patch)
tree2f5fec8d71345e39285364e2695717cea4023b12 /src/semantic/scope.cpp
parentddedc416185954051ff2a826c24fc1cc608204f1 (diff)
Written some class declarations
Diffstat (limited to 'src/semantic/scope.cpp')
-rw-r--r--src/semantic/scope.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/semantic/scope.cpp b/src/semantic/scope.cpp
new file mode 100644
index 0000000..75c4e61
--- /dev/null
+++ b/src/semantic/scope.cpp
@@ -0,0 +1,52 @@
+#include "semantic/scope.h"
+
+Scope::Scope(std::string name, int level, std::unique_ptr<Scope> parent) : scope_name(name), scope_level(level), parent_scope(parent) {}
+
+std::string Scope::getScopeName() {
+ return scope_name;
+}
+
+int Scope::getScopeLevel() {
+ return scope_level;
+}
+
+std::unique_ptr<Scope> Scope::getParentScope() {
+ return parent_scope;
+}
+
+void Scope::define(Symbol symbol) {
+ if (isDeclared(symbol->getName())) {
+ // error
+ }
+
+ else {
+ symobls.add(symbol->getName(), symbol);
+ }
+}
+
+std::unique_ptr<Symbol> Scope::lookup(std::string name) {
+ auto it = symbols.find(name);
+ if (it != symbols.end()) {
+ return &(it->second);
+ }
+
+ return nullptr;
+}
+
+bool Scope::isDeclared(std::string name) {
+ return lookup(name) != nullptr;
+}
+
+std::unordered_map<std::string, Symbol> Scope::getAllSymbols() {
+ return symbols;
+}
+
+std::string Scope::toString() {
+ std::string result = "Scope: " + scope_name + "(level " + std::to_string(scope_level) + ") \n";
+
+ for (auto& pair : symbols) {
+ result += " " + pair.first + " : " + pair.second.getDataType() + "\n";
+ }
+
+ return result;
+}