summaryrefslogtreecommitdiffhomepage
path: root/flowgraph/scope.cpp
diff options
context:
space:
mode:
authorRoland Reichwein <mail@reichwein.it>2020-11-15 18:39:01 +0100
committerRoland Reichwein <mail@reichwein.it>2020-11-15 18:39:01 +0100
commita3b4cd4fdd4340c952eaa00bca9bebf817b901ae (patch)
tree055d3ae4b9d1e37682c2e49b31a6531f189eebf5 /flowgraph/scope.cpp
parentd07c5bc14edbe071ee7b4f47f174780e95e451aa (diff)
Fixed unit tests, prepared hierarchical evaluation via stack (WIP)
Diffstat (limited to 'flowgraph/scope.cpp')
-rw-r--r--flowgraph/scope.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/flowgraph/scope.cpp b/flowgraph/scope.cpp
new file mode 100644
index 0000000..6c2e30c
--- /dev/null
+++ b/flowgraph/scope.cpp
@@ -0,0 +1,28 @@
+#include "scope.h"
+
+#include "storage.h"
+
+void FlowGraph::LocalScope::push_back(std::shared_ptr<Data> data)
+{
+ m_variables.push_back(data);
+}
+
+void FlowGraph::LocalScope::append(const FlowGraph::LocalScope& other)
+{
+ m_variables.insert(m_variables.end(), other.m_variables.begin(), other.m_variables.end());
+}
+
+index_t FlowGraph::LocalScope::indexOfStorage(const TemporaryStorage& storage) const
+{
+ for (index_t i = 0; i < m_variables.size(); i++) {
+ FlowGraph::Storage& i_storage {*(m_variables[i]->storage())};
+
+ if (typeid(i_storage) == typeid(FlowGraph::TemporaryStorage)) {
+ FlowGraph::TemporaryStorage& temporaryStorage{dynamic_cast<FlowGraph::TemporaryStorage&>(i_storage)};
+ if (&temporaryStorage == &storage) // compare addresses
+ return i;
+ }
+ }
+
+ throw std::runtime_error("ICE: Storage not found");
+}