From 4f77ad5d019618893c59a0f8d5bfa6b98e50a3be Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Tue, 18 Aug 2026 13:31:47 +0200 Subject: Make Int and Word aliases to fixed-size types --- include/elna/boot/ast.h | 8 ++++---- include/elna/boot/dependency.h | 6 +++++- include/elna/boot/name_analysis.h | 2 +- include/elna/boot/result.h | 2 +- include/elna/boot/symbol.h | 5 +++-- include/elna/gcc/elna-generic.h | 2 +- 6 files changed, 15 insertions(+), 10 deletions(-) (limited to 'include') diff --git a/include/elna/boot/ast.h b/include/elna/boot/ast.h index 2645026..a05233c 100644 --- a/include/elna/boot/ast.h +++ b/include/elna/boot/ast.h @@ -91,7 +91,7 @@ namespace elna::boot }; template<> - struct literal_type_id + struct literal_type_id { static constexpr int value = 4; }; @@ -189,7 +189,7 @@ 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; virtual void visit(literal *) = 0; virtual void visit(literal *) = 0; }; @@ -238,7 +238,7 @@ 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; [[noreturn]] void visit(literal *) override; [[noreturn]] void visit(literal *) override; }; @@ -285,7 +285,7 @@ namespace elna::boot void visit(literal *) override; void visit(literal *) override; 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/dependency.h b/include/elna/boot/dependency.h index 75bbed3..d534585 100644 --- a/include/elna/boot/dependency.h +++ b/include/elna/boot/dependency.h @@ -47,6 +47,10 @@ namespace elna::boot { std::unordered_map cache; + // The builtin table stores global aliases (such as Int, Word) as weak + // pointers, so the state keeps their owners alive. + std::vector> alias_owners; + public: const std::shared_ptr globals; T custom; @@ -55,7 +59,7 @@ namespace elna::boot using const_iterator = std::unordered_map::const_iterator; explicit dependency_state(T custom, const target_info& target) - : globals(builtin_symbol_table(target)), custom(custom) + : globals(builtin_symbol_table(target, this->alias_owners)), custom(custom) { } diff --git a/include/elna/boot/name_analysis.h b/include/elna/boot/name_analysis.h index 736874a..91b669c 100644 --- a/include/elna/boot/name_analysis.h +++ b/include/elna/boot/name_analysis.h @@ -175,7 +175,7 @@ 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; 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 23505d0..ccc95ca 100644 --- a/include/elna/boot/result.h +++ b/include/elna/boot/result.h @@ -764,7 +764,7 @@ namespace elna::boot integer_literal, double, bool, - unsigned char, + std::uint32_t, std::nullptr_t, std::string, constant_aggregate, diff --git a/include/elna/boot/symbol.h b/include/elna/boot/symbol.h index f048016..5817b38 100644 --- a/include/elna/boot/symbol.h +++ b/include/elna/boot/symbol.h @@ -402,7 +402,8 @@ namespace elna::boot std::shared_ptr is_variable() override; }; - std::shared_ptr builtin_symbol_table(const target_info& target); + std::shared_ptr builtin_symbol_table(const target_info& target, + std::vector>& alias_owners); /** * Symbol bag contains: @@ -589,7 +590,7 @@ namespace elna::boot bool is_scalar_type(const type& checked); /** - * Checks whether the given type is a string (slice of const Char). + * Checks whether the given type is a string (slice of const bytes). * * \param checked The type t o check. * \return Whether the type is a string type. diff --git a/include/elna/gcc/elna-generic.h b/include/elna/gcc/elna-generic.h index 097a660..2d65a26 100644 --- a/include/elna/gcc/elna-generic.h +++ b/include/elna/gcc/elna-generic.h @@ -76,7 +76,7 @@ namespace elna::gcc void visit(boot::literal *literal) override; void visit(boot::literal *literal) override; void visit(boot::literal *boolean) override; - void visit(boot::literal *character) 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; -- cgit v1.2.3