From 134d3ac4caff6d87c79b0892e57073594cb0064c Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Fri, 9 Oct 2026 14:43:11 +0200 Subject: Remove Pointer and nil support --- include/elna/boot/ast.h | 11 +---------- include/elna/boot/evaluator.h | 2 +- include/elna/boot/materialization.h | 6 +----- include/elna/boot/name_analysis.h | 1 - include/elna/boot/result.h | 16 +++++++++++++++- include/elna/boot/type_check.h | 8 -------- include/elna/gcc/elna-generic.h | 1 - 7 files changed, 18 insertions(+), 27 deletions(-) (limited to 'include') diff --git a/include/elna/boot/ast.h b/include/elna/boot/ast.h index e7a77ac..8f8da13 100644 --- a/include/elna/boot/ast.h +++ b/include/elna/boot/ast.h @@ -98,16 +98,10 @@ namespace elna::boot static constexpr int value = 4; }; - template<> - struct literal_type_id - { - static constexpr int value = 5; - }; - template<> struct literal_type_id { - static constexpr int value = 6; + static constexpr int value = 5; }; template @@ -219,7 +213,6 @@ namespace elna::boot virtual void visit(literal *) = 0; virtual void visit(literal *) = 0; virtual void visit(literal *) = 0; - virtual void visit(literal *) = 0; virtual void visit(literal *) = 0; }; @@ -271,7 +264,6 @@ namespace elna::boot [[noreturn]] void visit(literal *) override; [[noreturn]] void visit(literal *) override; [[noreturn]] void visit(literal *) override; - [[noreturn]] void visit(literal *) override; [[noreturn]] void visit(literal *) override; }; @@ -321,7 +313,6 @@ namespace elna::boot void visit(literal *) override; void visit(literal *) override; void visit(literal *) override; - void visit(literal *) override; void visit(literal *) override; }; diff --git a/include/elna/boot/evaluator.h b/include/elna/boot/evaluator.h index 6dc204f..72e1f21 100644 --- a/include/elna/boot/evaluator.h +++ b/include/elna/boot/evaluator.h @@ -97,7 +97,7 @@ namespace elna::boot static std::optional cast_to_char(const constant_value& source_expression); static std::optional cast_to_enumeration(const constant_value& source_expression, const enumeration_type& enumeration, std::size_t target_size); - static std::optional cast_to_pointer(const constant_value& source_expression); + std::optional cast_to_pointer(const constant_value& source_expression) const; public: std::optional evaluate_index(expression& subject); diff --git a/include/elna/boot/materialization.h b/include/elna/boot/materialization.h index c4abb11..74b4133 100644 --- a/include/elna/boot/materialization.h +++ b/include/elna/boot/materialization.h @@ -30,9 +30,7 @@ namespace elna::boot real_overflow, local_export, local_extern, - field_export, - variable_generic, - field_generic + variable_generic }; materialization_error(const source_position position, kind error_kind); @@ -55,8 +53,6 @@ namespace elna::boot void visit(procedure_declaration *declaration) override; void visit(variable_declaration *declaration) override; - void visit(record_type_expression *expression) override; - void visit(literal *literal) override; void visit(literal *literal) override; }; diff --git a/include/elna/boot/name_analysis.h b/include/elna/boot/name_analysis.h index 16734cd..62b91b4 100644 --- a/include/elna/boot/name_analysis.h +++ b/include/elna/boot/name_analysis.h @@ -399,7 +399,6 @@ namespace elna::boot void visit(literal *literal) override; void visit(literal *literal) override; void visit(literal *literal) override; - void visit(literal *literal) override; void visit(literal *literal) override; }; diff --git a/include/elna/boot/result.h b/include/elna/boot/result.h index 540307c..2239413 100644 --- a/include/elna/boot/result.h +++ b/include/elna/boot/result.h @@ -865,6 +865,14 @@ namespace elna::boot template typename C, template typename Alloc = std::allocator> class constant_aggregate; + struct pointer_literal + { + integer_literal address; + + bool operator==(const pointer_literal& that) const = default; + auto operator<=>(const pointer_literal& that) const = default; + }; + /** * Typed constant value produced by the constant expression evaluator. * @@ -876,7 +884,7 @@ namespace elna::boot float_literal, bool, std::uint32_t, - std::nullptr_t, + pointer_literal, std::string, constant_aggregate, constant_aggregate @@ -1013,6 +1021,12 @@ struct std::hash> std::size_t operator()(const elna::boot::constant_aggregate& key) const noexcept; }; +template<> +struct std::hash +{ + std::size_t operator()(const elna::boot::pointer_literal& key) const noexcept; +}; + template<> struct std::hash { diff --git a/include/elna/boot/type_check.h b/include/elna/boot/type_check.h index d9a07b9..98db843 100644 --- a/include/elna/boot/type_check.h +++ b/include/elna/boot/type_check.h @@ -248,15 +248,7 @@ namespace elna::boot }; context ctx; - /** - * Checks whether derived has base in its record parent chain. - * - * Base record type must not be null. Derived record type may be null. - */ - verdict guard_const_laundering() const; - verdict check_exact_match() const; - verdict check_pointer_hatch() const; verdict check_pointer_conversion() const; verdict check_slice_conversion() const; verdict check_array_conversion() const; diff --git a/include/elna/gcc/elna-generic.h b/include/elna/gcc/elna-generic.h index 54f320e..f942f81 100644 --- a/include/elna/gcc/elna-generic.h +++ b/include/elna/gcc/elna-generic.h @@ -89,7 +89,6 @@ namespace elna::gcc void visit(boot::literal *literal) override; void visit(boot::literal *boolean) override; void visit(boot::literal *character) override; - void visit(boot::literal *) override; void visit(boot::literal *string) override; void visit(boot::traits_expression *trait) override; void visit(boot::binary_expression *expression) override; -- cgit v1.2.3