diff --git a/src/spider/CMakeLists.txt b/src/spider/CMakeLists.txt index da1e3f236..131022a86 100644 --- a/src/spider/CMakeLists.txt +++ b/src/spider/CMakeLists.txt @@ -194,3 +194,24 @@ target_link_libraries( ) add_library(spider::spider ALIAS spider_client) + +set(SPIDER_TDL_SHARED_SOURCES + tdl/parser/ast/Node.cpp + CACHE INTERNAL + "spider task definition language shared source files" +) + +set(SPIDER_TDL_SHARED_HEADERS + tdl/parser/ast/Node.hpp + CACHE INTERNAL + "spider task definition language shared header files" +) + +add_library(spider_tdl) +target_sources(spider_tdl PRIVATE ${SPIDER_TDL_SHARED_SOURCES}) +target_sources(spider_tdl PUBLIC ${SPIDER_TDL_SHARED_HEADERS}) +target_include_directories(spider_tdl PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..) + +target_link_libraries(spider_tdl PUBLIC ystdlib::error_handling) + +add_library(spider::tdl ALIAS spider_tdl) diff --git a/src/spider/tdl/parser/ast/Node.cpp b/src/spider/tdl/parser/ast/Node.cpp new file mode 100644 index 000000000..1dbe97ad0 --- /dev/null +++ b/src/spider/tdl/parser/ast/Node.cpp @@ -0,0 +1,23 @@ +#include "Node.hpp" + +#include + +#include + +using spider::tdl::parser::ast::Node; +using NodeErrorCodeCategory = ystdlib::error_handling::ErrorCategory; + +template <> +auto NodeErrorCodeCategory::name() const noexcept -> char const* { + return "spider::tdl::parser::ast::Node"; +} + +template <> +auto NodeErrorCodeCategory ::message(Node::ErrorCodeEnum error_enum) const -> std::string { + switch (error_enum) { + case Node::ErrorCodeEnum::PlaceholderError: + return "This is a placeholder error code enum"; + default: + return "Unknown error code enum"; + } +} diff --git a/src/spider/tdl/parser/ast/Node.hpp b/src/spider/tdl/parser/ast/Node.hpp new file mode 100644 index 000000000..33af7f890 --- /dev/null +++ b/src/spider/tdl/parser/ast/Node.hpp @@ -0,0 +1,27 @@ +#ifndef SPIDER_TDL_PARSER_AST_NODE_HPP +#define SPIDER_TDL_PARSER_AST_NODE_HPP + +#include + +#include + +namespace spider::tdl::parser::ast { +/** + * Abstracted base class for all AST nodes in the TDL. + */ +class Node { +public: + // Types + enum class ErrorCodeEnum : uint8_t { + PlaceholderError = 1, + }; + + using ErrorCode = ystdlib::error_handling::ErrorCode; + +private: +}; +} // namespace spider::tdl::parser::ast + +YSTDLIB_ERROR_HANDLING_MARK_AS_ERROR_CODE_ENUM(spider::tdl::parser::ast::Node::ErrorCodeEnum); + +#endif // SPIDER_TDL_PARSER_AST_NODE_HPP diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a04b1c584..6c8fa95b1 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -2,6 +2,7 @@ set(SPIDER_TEST_SOURCES storage/test-DataStorage.cpp storage/test-MetadataStorage.cpp storage/StorageTestHelper.hpp + tdl/test-parser-ast.cpp utils/CoreDataUtils.hpp utils/CoreTaskUtils.hpp utils/CoreTaskUtils.cpp @@ -39,6 +40,7 @@ target_link_libraries( PRIVATE spider_core spider_client + spider_tdl ) target_link_libraries( unitTest diff --git a/tests/tdl/test-parser-ast.cpp b/tests/tdl/test-parser-ast.cpp new file mode 100644 index 000000000..e439b0d4a --- /dev/null +++ b/tests/tdl/test-parser-ast.cpp @@ -0,0 +1,18 @@ +// NOLINTBEGIN(cert-err58-cpp,cppcoreguidelines-avoid-do-while,readability-function-cognitive-complexity,cppcoreguidelines-avoid-non-const-global-variables,cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays) + +#include +#include + +#include + +namespace { +TEST_CASE("test-ast-node", "[tdl][ast][Node]") { + using spider::tdl::parser::ast::Node; + using ystdlib::error_handling::Result; + + Result const result{Node::ErrorCode{Node::ErrorCodeEnum::PlaceholderError}}; + REQUIRE(result.has_error()); +} +} // namespace + +// NOLINTEND(cert-err58-cpp,cppcoreguidelines-avoid-do-while,readability-function-cognitive-complexity,cppcoreguidelines-avoid-non-const-global-variables,cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays)