diff options
| author | Nagi5Yeq <wu@x-nagi.com> | 2020-05-14 02:05:13 +0800 |
|---|---|---|
| committer | Nagi5Yeq <wu@x-nagi.com> | 2020-05-14 02:05:13 +0800 |
| commit | d80958f987790f533f5048c2e0e8a1cd5fd9f5a1 (patch) | |
| tree | 48f1fcc577eb9b92b2766a0d354f59f12cf8680f /node/LiteralNode.hh | |
| parent | c7d52437db42232d98e585a52ed2fdf75eb7f1af (diff) | |
use template to make literal nodes
Diffstat (limited to 'node/LiteralNode.hh')
| -rw-r--r-- | node/LiteralNode.hh | 20 |
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 |
