aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/elna/boot/ast.h4
-rw-r--r--include/elna/boot/semantic.h12
-rw-r--r--include/elna/boot/symbol.h5
3 files changed, 18 insertions, 3 deletions
diff --git a/include/elna/boot/ast.h b/include/elna/boot/ast.h
index 0642d44..6942ca5 100644
--- a/include/elna/boot/ast.h
+++ b/include/elna/boot/ast.h
@@ -287,8 +287,10 @@ namespace elna::boot
{
public:
const std::vector<field_declaration> fields;
+ const std::optional<std::string> base;
- record_type_expression(const struct position position, std::vector<field_declaration>&& fields);
+ record_type_expression(const struct position position,
+ std::vector<field_declaration>&& fields, std::optional<std::string> base);
void accept(parser_visitor *visitor) override;
record_type_expression *is_record() override;
diff --git a/include/elna/boot/semantic.h b/include/elna/boot/semantic.h
index a0a4a73..6bc7fe0 100644
--- a/include/elna/boot/semantic.h
+++ b/include/elna/boot/semantic.h
@@ -78,6 +78,16 @@ namespace elna::boot
std::string what() const override;
};
+ class base_type_error : public error
+ {
+ const std::string base;
+
+ public:
+ base_type_error(const std::string& base, const struct position position);
+
+ std::string what() const override;
+ };
+
/**
* Checks types.
*/
@@ -153,7 +163,7 @@ namespace elna::boot
void visit(traits_expression *trait) override;
void visit(binary_expression *expression) override;
void visit(unary_expression *expression) override;
- void visit(named_expression *type_expression) override;
+ void visit(named_expression *expression) override;
void visit(array_access_expression *expression) override;
void visit(field_access_expression *expression) override;
void visit(dereference_expression *expression) override;
diff --git a/include/elna/boot/symbol.h b/include/elna/boot/symbol.h
index 5ef917e..beb44e2 100644
--- a/include/elna/boot/symbol.h
+++ b/include/elna/boot/symbol.h
@@ -129,6 +129,9 @@ namespace elna::boot
struct record_type
{
std::vector<type_field> fields;
+ const type base;
+
+ explicit record_type(type base = type());
};
struct union_type
@@ -143,7 +146,7 @@ namespace elna::boot
std::vector<type> parameters;
const return_t return_type;
- procedure_type(return_t return_type = return_t());
+ explicit procedure_type(return_t return_type = return_t());
};
struct enumeration_type