diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/elna/boot/ast.h | 8 | ||||
| -rw-r--r-- | include/elna/boot/dependency.h | 6 | ||||
| -rw-r--r-- | include/elna/boot/name_analysis.h | 2 | ||||
| -rw-r--r-- | include/elna/boot/result.h | 2 | ||||
| -rw-r--r-- | include/elna/boot/symbol.h | 5 | ||||
| -rw-r--r-- | include/elna/gcc/elna-generic.h | 2 |
6 files changed, 15 insertions, 10 deletions
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<unsigned char> + struct literal_type_id<std::uint32_t> { static constexpr int value = 4; }; @@ -189,7 +189,7 @@ namespace elna::boot virtual void visit(literal<integer_literal> *) = 0; virtual void visit(literal<double> *) = 0; virtual void visit(literal<bool> *) = 0; - virtual void visit(literal<unsigned char> *) = 0; + virtual void visit(literal<std::uint32_t> *) = 0; virtual void visit(literal<std::nullptr_t> *) = 0; virtual void visit(literal<std::string> *) = 0; }; @@ -238,7 +238,7 @@ namespace elna::boot [[noreturn]] void visit(literal<integer_literal> *) override; [[noreturn]] void visit(literal<double> *) override; [[noreturn]] void visit(literal<bool> *) override; - [[noreturn]] void visit(literal<unsigned char> *) override; + [[noreturn]] void visit(literal<std::uint32_t> *) override; [[noreturn]] void visit(literal<std::nullptr_t> *) override; [[noreturn]] void visit(literal<std::string> *) override; }; @@ -285,7 +285,7 @@ namespace elna::boot void visit(literal<integer_literal> *) override; void visit(literal<double> *) override; void visit(literal<bool> *) override; - void visit(literal<unsigned char> *) override; + void visit(literal<std::uint32_t> *) override; void visit(literal<std::nullptr_t> *) override; void visit(literal<std::string> *) 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<std::filesystem::path, symbol_bag> cache; + // The builtin table stores global aliases (such as Int, Word) as weak + // pointers, so the state keeps their owners alive. + std::vector<std::shared_ptr<alias_type>> alias_owners; + public: const std::shared_ptr<symbol_table> globals; T custom; @@ -55,7 +59,7 @@ namespace elna::boot using const_iterator = std::unordered_map<std::filesystem::path, symbol_bag>::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<integer_literal> *literal) override; void visit(literal<double> *literal) override; void visit(literal<bool> *literal) override; - void visit(literal<unsigned char> *literal) override; + void visit(literal<std::uint32_t> *literal) override; void visit(literal<std::nullptr_t> *literal) override; void visit(literal<std::string> *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<ordered_map>, 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<variable_info> is_variable() override; }; - std::shared_ptr<symbol_table> builtin_symbol_table(const target_info& target); + std::shared_ptr<symbol_table> builtin_symbol_table(const target_info& target, + std::vector<std::shared_ptr<alias_type>>& 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<boot::integer_literal> *literal) override; void visit(boot::literal<double> *literal) override; void visit(boot::literal<bool> *boolean) override; - void visit(boot::literal<unsigned char> *character) override; + void visit(boot::literal<std::uint32_t> *character) override; void visit(boot::literal<std::nullptr_t> *) override; void visit(boot::literal<std::string> *string) override; void visit(boot::traits_expression *trait) override; |
