diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/elna/boot/ast.h | 4 | ||||
| -rw-r--r-- | include/elna/boot/semantic.h | 12 | ||||
| -rw-r--r-- | include/elna/boot/symbol.h | 5 |
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 |
