From 967be9e750221ab2ab783f95df79bb26d290a45e Mon Sep 17 00:00:00 2001 From: Martial Simon Date: Mon, 15 Sep 2025 01:07:58 +0200 Subject: add: added projects --- tiger-compiler/src/assert/libassert.hxx | 45 +++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 tiger-compiler/src/assert/libassert.hxx (limited to 'tiger-compiler/src/assert/libassert.hxx') diff --git a/tiger-compiler/src/assert/libassert.hxx b/tiger-compiler/src/assert/libassert.hxx new file mode 100644 index 0000000..fcd2eb4 --- /dev/null +++ b/tiger-compiler/src/assert/libassert.hxx @@ -0,0 +1,45 @@ +/** + ** \file assert/libassert.hxx + ** \brief Implementation of functions exported by the assert module. + */ + +#pragma once + +#include + +#include +#include +#include +#include + +namespace assert +{ + + template void bind_and_types_check(A& tree) + { + misc::error e; + e << ::assert::bind(tree); + e.ice_on_error_here(); + e << ::assert::types_check(tree); + e.ice_on_error_here(); + } + + template + A* raw_desugar(const A& tree, bool desugar_for_p, bool desugar_string_cmp_p) + { + DesugarVisitor desugar(desugar_for_p, desugar_string_cmp_p); + desugar(tree); + return dynamic_cast(desugar.result_get()); + } + + template + A* desugar(const A& tree, bool desugar_for_p, bool desugar_string_cmp_p) + { + A* desugared = raw_desugar(tree, desugar_for_p, desugar_string_cmp_p); + assertion(desugared); + std::unique_ptr desugared_ptr(desugared); + bind_and_types_check(*desugared_ptr); + return desugared_ptr.release(); + } + +} -- cgit v1.2.3