aboutsummaryrefslogtreecommitdiffstats
path: root/var.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'var.cpp')
-rw-r--r--var.cpp21
1 files changed, 11 insertions, 10 deletions
diff --git a/var.cpp b/var.cpp
index 6fe9104..c907d7a 100644
--- a/var.cpp
+++ b/var.cpp
@@ -17,15 +17,11 @@
*/
#include "var.hpp"
-#include <list>
-#include <map>
-#include <string>
-
-static std::list<std::map<std::string, Var>> llvmVars;
+std::list<std::map<std::string, Var>> Var::vars;
Var Var::lookup(const std::string& name, int skip)
{
- for (auto sc = llvmVars.rbegin(); sc != llvmVars.rend(); ++sc) {
+ for (auto sc = vars.rbegin(); sc != vars.rend(); ++sc) {
if (skip > 0) {
--skip;
continue;
@@ -37,23 +33,28 @@ Var Var::lookup(const std::string& name, int skip)
return {};
}
+Var Var::lookupLocal(const std::string& name)
+{
+ return vars.back().contains(name) ? vars.back()[name] : Var();
+}
+
void Var::pushScope()
{
- llvmVars.emplace_back();
+ vars.emplace_back();
}
void Var::popScope()
{
- llvmVars.pop_back();
+ vars.pop_back();
}
Var& Var::addGlobal(const std::string& name, Var var)
{
- return llvmVars.front().emplace(name, var).first->second;
+ return vars.front().emplace(name, var).first->second;
}
Var& Var::addLocal(const std::string& name, Var var)
{
- return llvmVars.back().emplace(name, var).first->second;
+ return vars.back().emplace(name, var).first->second;
}