aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-08-18 13:31:47 +0200
committerEugen Wissner <belka@caraus.de>2026-08-18 13:31:47 +0200
commit4f77ad5d019618893c59a0f8d5bfa6b98e50a3be (patch)
treed9e01460ecf94a491be476fbca76b6608276d967 /include
parent4b7c87a9b53f5317e9f7982bd779d53a66960bdc (diff)
downloadelna-4f77ad5d019618893c59a0f8d5bfa6b98e50a3be.tar.gz
Make Int and Word aliases to fixed-size types
Diffstat (limited to 'include')
-rw-r--r--include/elna/boot/ast.h8
-rw-r--r--include/elna/boot/dependency.h6
-rw-r--r--include/elna/boot/name_analysis.h2
-rw-r--r--include/elna/boot/result.h2
-rw-r--r--include/elna/boot/symbol.h5
-rw-r--r--include/elna/gcc/elna-generic.h2
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;