From b604d7ddb555c6f4cdaec566be6b32efcf07d291 Mon Sep 17 00:00:00 2001 From: Riyyi Date: Sun, 19 Mar 2023 12:04:48 +0100 Subject: [PATCH] AST: Add error node --- src/ast.cpp | 7 +++++++ src/ast.h | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/ast.cpp b/src/ast.cpp index 5b14c23..04ff2d3 100644 --- a/src/ast.cpp +++ b/src/ast.cpp @@ -10,6 +10,13 @@ namespace blaze { +Error::Error(const std::string& error) + : m_error(error) +{ +} + +// ----------------------------------------- + List::~List() { for (auto node : m_nodes) { diff --git a/src/ast.h b/src/ast.h index 5c411c7..b891c3e 100644 --- a/src/ast.h +++ b/src/ast.h @@ -23,6 +23,7 @@ public: template bool fastIs() const = delete; + virtual bool isError() const { return false; } virtual bool isVector() const { return false; } virtual bool isHashMap() const { return false; } virtual bool isList() const { return false; } @@ -34,6 +35,21 @@ public: // ----------------------------------------- +class Error final : public ASTNode { +public: + Error(const std::string& error); + virtual ~Error() = default; + + virtual bool isError() const override { return true; } + + const std::string& error() const { return m_error; } + +private: + std::string m_error; +}; + +// ----------------------------------------- + // [] class Vector final : public ASTNode { public: @@ -143,6 +159,9 @@ private: // ----------------------------------------- // clang-format off +template<> +inline bool ASTNode::fastIs() const { return isError(); } + template<> inline bool ASTNode::fastIs() const { return isVector(); }