bl-compiler

compiler for the bl programming language.
Log | Files | Refs | README

scope.cpp (1159B)


      1 #include "scope.hpp"
      2 
      3 Scope::Scope(std::string name, int level, std::unique_ptr<Scope> parent) : scope_name(name), scope_level(level), parent_scope(parent) {}
      4 
      5 std::string Scope::getScopeName() {
      6     return scope_name;
      7 }
      8 
      9 int Scope::getScopeLevel() {
     10     return scope_level;
     11 }
     12 
     13 std::unique_ptr<Scope> Scope::getParentScope() {
     14     return parent_scope;
     15 }
     16 
     17 void Scope::define(Symbol symbol) {
     18     if (isDeclared(symbol->getName())) {
     19         // error
     20     }
     21     
     22     else {
     23         symobls.add(symbol->getName(), symbol);
     24     }
     25 }
     26 
     27 std::unique_ptr<Symbol> Scope::lookup(std::string name) {
     28     auto it = symbols.find(name);
     29     if (it != symbols.end()) {
     30         return &(it->second);
     31     }
     32 
     33     return nullptr;
     34 }
     35 
     36 bool Scope::isDeclared(std::string name) {
     37     return lookup(name) != nullptr;
     38 }
     39 
     40 std::unordered_map<std::string, Symbol> Scope::getAllSymbols() {
     41     return symbols;
     42 }
     43 
     44 std::string Scope::toString() {
     45     std::string result = "Scope: " + scope_name + "(level " + std::to_string(scope_level) + ") \n";
     46 
     47     for (auto& pair : symbols) {
     48         result += "  " + pair.first + " : " + pair.second.getDataType() + "\n";
     49     }
     50     
     51     return result;
     52 }