summaryrefslogtreecommitdiffhomepage
path: root/flowgraph/scope.cpp
blob: 6c2e30c8d9a699da9310717243cbd423655a0a73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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");
}