summaryrefslogtreecommitdiffhomepage
path: root/flowgraph
diff options
context:
space:
mode:
Diffstat (limited to 'flowgraph')
-rw-r--r--flowgraph/node.cpp13
-rw-r--r--flowgraph/node.h24
-rw-r--r--flowgraph/storage.h18
3 files changed, 39 insertions, 16 deletions
diff --git a/flowgraph/node.cpp b/flowgraph/node.cpp
index 795a252..9b68d74 100644
--- a/flowgraph/node.cpp
+++ b/flowgraph/node.cpp
@@ -14,17 +14,22 @@ Data FlowGraph::MakeConstantInt(int i)
return Data(DataType::Int, std::make_shared<Constant>(value));
}
-Data FlowGraph::MakeLocalPointer(const std::string& name)
+Data FlowGraph::MakeLocalPointer(FlowGraph::LocalScope& scope, const std::string& name)
{
- return Data(DataType::Pointer, std::make_shared<LocalStorage>(name));
+ return Data(DataType::Pointer, std::make_shared<LocalStorage>(scope, name));
}
-Data FlowGraph::MakeLocalSize(const std::string& name)
+Data FlowGraph::MakeLocalSize(FlowGraph::LocalScope& scope, const std::string& name)
{
- return Data(DataType::Size, std::make_shared<LocalStorage>(name));
+ return Data(DataType::Size, std::make_shared<LocalStorage>(scope, name));
}
Data FlowGraph::MakeTemporaryInt(FlowGraph::LocalScope& scope)
{
return Data(DataType::Int, std::make_shared<TemporaryStorage>(scope));
}
+
+LocalScope& CreateScopeOp::scope()
+{
+ return m_scope;
+}
diff --git a/flowgraph/node.h b/flowgraph/node.h
index 9ae5479..98c684d 100644
--- a/flowgraph/node.h
+++ b/flowgraph/node.h
@@ -43,8 +43,8 @@ namespace FlowGraph {
};
Data MakeConstantInt(int i);
- Data MakeLocalPointer(const std::string& name);
- Data MakeLocalSize(const std::string& name);
+ Data MakeLocalPointer(FlowGraph::LocalScope& scope, const std::string& name);
+ Data MakeLocalSize(FlowGraph::LocalScope& scope, const std::string& name);
Data MakeTemporaryInt(LocalScope& scope);
class MemCopy: public Node
@@ -114,7 +114,8 @@ namespace FlowGraph {
{
Increment,
Decrement,
- Negate
+ Negate,
+ Store // just take Data as-is to store it at destination
};
class UnaryOperation: public Node
@@ -159,4 +160,21 @@ namespace FlowGraph {
BinaryOperationType m_type;
};
+ // Open a new scope, with stack frame
+ class CreateScopeOp: public Node
+ {
+ public:
+ CreateScopeOp() {}
+ LocalScope& scope();
+ private:
+ LocalScope m_scope;
+ };
+
+ // Close current scope, closing stack frame
+ class DestroyScopeOp: public Node
+ {
+ public:
+ DestroyScopeOp() {}
+ };
+
} // namespace FlowGraph
diff --git a/flowgraph/storage.h b/flowgraph/storage.h
index 28aae1e..fd3c085 100644
--- a/flowgraph/storage.h
+++ b/flowgraph/storage.h
@@ -37,15 +37,6 @@ namespace FlowGraph {
std::string m_name;
};
- class LocalStorage : public Storage
- {
- public:
- LocalStorage(const std::string& name): m_name(name) {}
- const std::string& name() const { return m_name; }
- private:
- std::string m_name;
- };
-
// Provide a context for local temporaries name generation
class LocalScope
{
@@ -56,6 +47,15 @@ namespace FlowGraph {
size_t m_index{ 0 };
};
+ class LocalStorage : public Storage
+ {
+ public:
+ LocalStorage(LocalScope& scope, const std::string& name): m_name(name) {}
+ const std::string& name() const { return m_name; }
+ private:
+ std::string m_name;
+ };
+
// intermediate results, anonymous values
// use generated name
class TemporaryStorage : public Storage