From 0ad40ced64ba5b2b83f7c9274efea1aa3677a534 Mon Sep 17 00:00:00 2001
From: Clyne Sullivan <clyne@bitgloo.com>
Date: Sat, 15 Jun 2024 08:04:15 -0400
Subject: break code into separate files

---
 var.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100644 var.cpp

(limited to 'var.cpp')

diff --git a/var.cpp b/var.cpp
new file mode 100644
index 0000000..339054f
--- /dev/null
+++ b/var.cpp
@@ -0,0 +1,42 @@
+#include "var.hpp"
+
+#include <list>
+#include <map>
+#include <string>
+
+static std::list<std::map<std::string, Var>> llvmVars;
+
+Var Var::lookup(const std::string& name, int skip)
+{
+    for (auto sc = llvmVars.rbegin(); sc != llvmVars.rend(); ++sc) {
+        if (skip > 0) {
+            --skip;
+            continue;
+        }
+        if (sc->contains(name))
+            return (*sc)[name];
+    }
+
+    return {};
+}
+
+void Var::pushScope()
+{
+    llvmVars.emplace_back();
+}
+
+void Var::popScope()
+{
+    llvmVars.pop_back();
+}
+
+Var& Var::addGlobal(const std::string& name, Var var)
+{
+    return llvmVars.front().emplace(name, var).first->second;
+}
+
+Var& Var::addLocal(const std::string& name, Var var)
+{
+    return llvmVars.back().emplace(name, var).first->second;
+}
+
-- 
cgit v1.2.3