From 44d6e8a27294e5ca7300ab11900011b73d9336d4 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Tue, 21 Jul 2026 01:55:56 +0200 Subject: Implement slices --- boot/symbol.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'boot/symbol.cc') diff --git a/boot/symbol.cc b/boot/symbol.cc index d7a1cae..738e4e1 100644 --- a/boot/symbol.cc +++ b/boot/symbol.cc @@ -51,6 +51,11 @@ namespace elna::boot { } + type::type(std::shared_ptr slice) + : payload(slice) + { + } + type::type(std::shared_ptr procedure) : payload(procedure) { @@ -86,6 +91,7 @@ namespace elna::boot template std::shared_ptr type::get() const; template std::shared_ptr type::get() const; template std::shared_ptr type::get() const; + template std::shared_ptr type::get() const; template std::shared_ptr type::get() const; template std::shared_ptr type::get() const; template std::shared_ptr type::get() const; @@ -133,6 +139,12 @@ namespace elna::boot return right_array != nullptr && left_array->size == right_array->size && left_array->base == right_array->base; } + if (auto left_slice = resolved_this.get()) + { + auto right_slice = resolved_that.get(); + + return right_slice != nullptr && left_slice->base == right_slice->base; + } if (auto left_procedure = resolved_this.get()) { auto right_procedure = resolved_that.get(); @@ -176,6 +188,10 @@ namespace elna::boot { return "[" + std::to_string(payload->size) + "]" + payload->base.to_string(); } + else if constexpr (std::is_same_v>) + { + return "[]" + payload->base.to_string(); + } else if constexpr (std::is_same_v>) { return payload->base.empty() @@ -226,6 +242,11 @@ namespace elna::boot { } + slice_type::slice_type(type base) + : base(std::move(base)) + { + } + primitive_type::primitive_type(const std::string& identifier) : identifier(identifier) { -- cgit v1.2.3