From bb4f474cb2247e0e314beab5d7d72e673ff4e8b6 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Fri, 24 Jul 2026 03:11:32 +0200 Subject: Implement a repeat loop --- boot/symbol.cc | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) (limited to 'boot/symbol.cc') diff --git a/boot/symbol.cc b/boot/symbol.cc index da948fd..5e303fb 100644 --- a/boot/symbol.cc +++ b/boot/symbol.cc @@ -155,6 +155,11 @@ namespace elna::boot return resolved_this.empty() && resolved_that.empty(); } + type::operator bool() const + { + return !empty(); + } + bool type::empty() const { return std::holds_alternative(payload); @@ -458,35 +463,41 @@ namespace elna::boot bool is_numeric_type(const type& checked) { - type const resolved = resolve_underlying_type(checked); - - return is_primitive_type(resolved, "Int") - || is_primitive_type(resolved, "Word") - || is_primitive_type(resolved, "Float"); + return is_primitive_type(checked, "Int") + || is_primitive_type(checked, "Word") + || is_primitive_type(checked, "Float"); } bool is_integral_type(const type& checked) { - type const resolved = resolve_underlying_type(checked); - - return is_primitive_type(resolved, "Int") - || is_primitive_type(resolved, "Word"); + return is_primitive_type(checked, "Int") + || is_primitive_type(checked, "Word"); } bool is_discrete_type(const type& checked) { - type const resolved = resolve_underlying_type(checked); - - return is_primitive_type(resolved, "Int") - || is_primitive_type(resolved, "Word") - || is_primitive_type(resolved, "Bool") - || is_primitive_type(resolved, "Char"); + return is_integral_type(checked) + || is_primitive_type(checked, "Bool") + || is_primitive_type(checked, "Char"); } bool is_any_pointer_type(const type& checked) { return checked.get() != nullptr || checked.get() != nullptr - || is_primitive_type(resolve_underlying_type(checked), "Pointer"); + || is_primitive_type(checked, "Pointer"); + } + + type get_range_base_type(const type& range) + { + if (auto array = range.get()) + { + return array->base; + } + else if (auto slice = range.get()) + { + return slice->base; + } + return type(); } } -- cgit v1.2.3