summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRoland Reichwein <mail@reichwein.it>2020-11-22 17:11:11 +0100
committerRoland Reichwein <mail@reichwein.it>2020-11-22 17:11:11 +0100
commitad3fd947005400c90f41baa4416a27d94b1bc157 (patch)
tree4332b7ad2183f0e5b4e10719129573540519413a
parentfd8517e10937a5b72ed839ce900306f281d74b7d (diff)
Clarify flowgraph types
-rw-r--r--flowgraph/data.h32
-rw-r--r--flowgraph/node.cpp8
-rw-r--r--flowgraph/node.h2
-rw-r--r--flowgraph/storage.h17
-rw-r--r--tests/test-flowgraph.cpp2
5 files changed, 29 insertions, 32 deletions
diff --git a/flowgraph/data.h b/flowgraph/data.h
index 2b92b2e..65bac8f 100644
--- a/flowgraph/data.h
+++ b/flowgraph/data.h
@@ -8,18 +8,32 @@
namespace FlowGraph {
- // Explicitely not including size
+ // Data models:
+ // 64 bit Linux: LLP64
+ // 64 bit Windows: LP64
+ //
+ // Explicitely NOT defined here:
+ // * Size (same as Pointer, LongLong on Linux and Windows)
+ // * Bool (Byte)
+ // * Long (different on Linux (64 bit) and Windows (32 bit))
enum class DataType: int
{
- Size,
- Int,
+ Char, // 8 bit
+ UChar, // 8 bit
+
+ Short, // 16 bit on 64 bit Linux and Windows
+ UShort,
+
+ Int, // 32 bit on 64 bit Linux and Windows
UInt,
- Pointer,
- Bool,
- Char,
- UChar,
- Short,
- UShort
+
+ LongLong, // 64 bit on 64 bit Linux and Windows
+ ULongLong,
+
+ Pointer, // 64 bit on 64 bit Linux and Windows, size is same size
+
+ Float, // 32 bit, IEEE 754
+ Double // 64 bit, IEEE 754
};
class Storage; ///< forward declaration
diff --git a/flowgraph/node.cpp b/flowgraph/node.cpp
index d7ed939..cb7677a 100644
--- a/flowgraph/node.cpp
+++ b/flowgraph/node.cpp
@@ -22,16 +22,16 @@ Data FlowGraph::MakeConstantInt(int i)
return Data{DataType::Int, std::make_shared<Constant>(endian::to_little(uint32_t(i)))};
}
-Data FlowGraph::MakeLocalPointer(std::shared_ptr<FlowGraph::LocalScope> scope, const std::string& name)
+Data FlowGraph::MakeLocalInt(std::shared_ptr<FlowGraph::LocalScope> scope, const std::string& name)
{
- Data data{DataType::Pointer, std::make_shared<LocalStorage>(name)};
+ Data data{DataType::Int, std::make_shared<LocalStorage>(name)};
scope->push_back(std::make_shared<Data>(data));
return data;
}
-Data FlowGraph::MakeLocalSize(std::shared_ptr<FlowGraph::LocalScope> scope, const std::string& name)
+Data FlowGraph::MakeLocalPointer(std::shared_ptr<FlowGraph::LocalScope> scope, const std::string& name)
{
- Data data{DataType::Size, std::make_shared<LocalStorage>(name)};
+ Data data{DataType::Pointer, std::make_shared<LocalStorage>(name)};
scope->push_back(std::make_shared<Data>(data));
return data;
}
diff --git a/flowgraph/node.h b/flowgraph/node.h
index def3c04..34e937b 100644
--- a/flowgraph/node.h
+++ b/flowgraph/node.h
@@ -48,8 +48,8 @@ namespace FlowGraph {
};
Data MakeConstantInt(int i);
+ Data MakeLocalInt(std::shared_ptr<FlowGraph::LocalScope> scope, const std::string& name);
Data MakeLocalPointer(std::shared_ptr<FlowGraph::LocalScope> scope, const std::string& name);
- Data MakeLocalSize(std::shared_ptr<FlowGraph::LocalScope> scope, const std::string& name);
Data MakeTemporaryInt(std::shared_ptr<LocalScope> scope);
class MemCopy: public Node
diff --git a/flowgraph/storage.h b/flowgraph/storage.h
index 7b5c53b..9e95905 100644
--- a/flowgraph/storage.h
+++ b/flowgraph/storage.h
@@ -57,21 +57,4 @@ namespace FlowGraph {
TemporaryStorage();
};
- // dereferenced pointer
- class PointeeStorage : public Storage
- {
- public:
- PointeeStorage(const Data& pointer, const Data& offset): m_pointer(pointer), m_offset(offset) {
- if (pointer.type() != DataType::Pointer)
- throw std::runtime_error("Pointer argument must be a DataType::Pointer");
- if (offset.type() != DataType::Size)
- throw std::runtime_error("Offset argument must be a DataType::Size");
- }
- Data pointer() { return m_pointer; }
- Data offset() { return m_offset; }
- private:
- Data m_pointer;
- Data m_offset;
- };
-
}
diff --git a/tests/test-flowgraph.cpp b/tests/test-flowgraph.cpp
index 469d816..b0daeae 100644
--- a/tests/test-flowgraph.cpp
+++ b/tests/test-flowgraph.cpp
@@ -44,7 +44,7 @@ TEST_F(FlowGraphTest, build_graph) {
graph.push_back(createScope);
Data pointer{ MakeLocalPointer(createScope->scope(), "malloc1") };
- Data size{ MakeLocalSize(createScope->scope(), "size1") };
+ Data size{ MakeLocalInt(createScope->scope(), "size1") };
std::shared_ptr<Node> malloc1 {std::make_shared<AllocateDynamic>(pointer, size) };
graph.push_back(malloc1);