summaryrefslogtreecommitdiff
path: root/node/LiteralNode.hh
diff options
context:
space:
mode:
authorNagi5Yeq <wu@x-nagi.com>2020-05-14 02:05:13 +0800
committerNagi5Yeq <wu@x-nagi.com>2020-05-14 02:05:13 +0800
commitd80958f987790f533f5048c2e0e8a1cd5fd9f5a1 (patch)
tree48f1fcc577eb9b92b2766a0d354f59f12cf8680f /node/LiteralNode.hh
parentc7d52437db42232d98e585a52ed2fdf75eb7f1af (diff)
use template to make literal nodes
Diffstat (limited to 'node/LiteralNode.hh')
-rw-r--r--node/LiteralNode.hh20
1 files changed, 16 insertions, 4 deletions
diff --git a/node/LiteralNode.hh b/node/LiteralNode.hh
index 4f9a61a..1d5c1b8 100644
--- a/node/LiteralNode.hh
+++ b/node/LiteralNode.hh
@@ -6,14 +6,26 @@
#include "BaseNode.hh"
namespace pcc {
-class StringLiteralNode : public BaseNode {
+template <typename Type, typename Construct = Type>
+class LiteralNode : public BaseNode {
public:
- StringLiteralNode(Driver* driver, char* value);
- Value CodeGen() override;
+ LiteralNode(Driver* driver, Construct value);
+ Value CodeGen() override; // type-specific CodeGen() is in the .cc file.
private:
- std::string value_;
+ Type value_;
};
+
+template <typename Type, typename Construct>
+LiteralNode<Type, Construct>::LiteralNode(Driver* driver,
+ Construct value)
+ : BaseNode(driver)
+ , value_(value) {}
+
+using BooleanLiteralNode = LiteralNode<bool>;
+using IntegerLiteralNode = LiteralNode<int>;
+using RealLiteralNode = LiteralNode<float>;
+using StringLiteralNode = LiteralNode<std::string, char*>;
} // namespace pcc
#endif