aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/elna/boot/ast.h11
-rw-r--r--include/elna/boot/evaluator.h2
-rw-r--r--include/elna/boot/materialization.h6
-rw-r--r--include/elna/boot/name_analysis.h1
-rw-r--r--include/elna/boot/result.h16
-rw-r--r--include/elna/boot/type_check.h8
-rw-r--r--include/elna/gcc/elna-generic.h1
7 files changed, 18 insertions, 27 deletions
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
@@ -99,15 +99,9 @@ namespace elna::boot
};
template<>
- struct literal_type_id<std::nullptr_t>
- {
- static constexpr int value = 5;
- };
-
- template<>
struct literal_type_id<std::string>
{
- static constexpr int value = 6;
+ static constexpr int value = 5;
};
template<typename T>
@@ -219,7 +213,6 @@ namespace elna::boot
virtual void visit(literal<float_literal> *) = 0;
virtual void visit(literal<bool> *) = 0;
virtual void visit(literal<std::uint32_t> *) = 0;
- virtual void visit(literal<std::nullptr_t> *) = 0;
virtual void visit(literal<std::string> *) = 0;
};
@@ -271,7 +264,6 @@ namespace elna::boot
[[noreturn]] void visit(literal<float_literal> *) override;
[[noreturn]] void visit(literal<bool> *) override;
[[noreturn]] void visit(literal<std::uint32_t> *) override;
- [[noreturn]] void visit(literal<std::nullptr_t> *) override;
[[noreturn]] void visit(literal<std::string> *) override;
};
@@ -321,7 +313,6 @@ namespace elna::boot
void visit(literal<float_literal> *) override;
void visit(literal<bool> *) 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/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<constant_value> cast_to_char(const constant_value& source_expression);
static std::optional<constant_value> cast_to_enumeration(const constant_value& source_expression,
const enumeration_type& enumeration, std::size_t target_size);
- static std::optional<constant_value> cast_to_pointer(const constant_value& source_expression);
+ std::optional<constant_value> cast_to_pointer(const constant_value& source_expression) const;
public:
std::optional<std::size_t> 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<integer_literal> *literal) override;
void visit(literal<float_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<float_literal> *literal) override;
void visit(literal<bool> *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 540307c..2239413 100644
--- a/include/elna/boot/result.h
+++ b/include/elna/boot/result.h
@@ -865,6 +865,14 @@ namespace elna::boot
template<template<typename, typename> typename C, template<typename> 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<ordered_map>,
constant_aggregate<std::vector>
@@ -1014,6 +1022,12 @@ struct std::hash<elna::boot::constant_aggregate<elna::boot::ordered_map>>
};
template<>
+struct std::hash<elna::boot::pointer_literal>
+{
+ std::size_t operator()(const elna::boot::pointer_literal& key) const noexcept;
+};
+
+template<>
struct std::hash<elna::boot::integer_literal>
{
std::size_t operator()(const elna::boot::integer_literal& key) const noexcept;
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<boot::float_literal> *literal) override;
void visit(boot::literal<bool> *boolean) 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;
void visit(boot::binary_expression *expression) override;