type structure change, mostly done

This commit is contained in:
ProgramSnail 2023-08-08 12:48:36 +03:00
parent 522dd16f79
commit a7c1e3f658
9 changed files with 183 additions and 66 deletions

View file

@ -1,6 +1,7 @@
#pragma once
#include "basic_nodes.hpp"
#include "builtin_types.hpp"
#include "doc_nodes.hpp"
#include "expression_nodes.hpp"
#include "type_nodes.hpp"
@ -92,7 +93,8 @@ public:
Modifier before_modifier = Modifier::NONE)
: annotation_(annotation), type_(type),
before_modifier_(before_modifier),
after_modifier_(type.get()->get_modifier()) {}
after_modifier_(
builtin::builtin_to_modifier(type.get()->to_builtin())) {}
//
@ -143,15 +145,18 @@ public:
return false;
}
auto type_after_modifier =
builtin::builtin_to_modifier(type.get()->to_builtin());
if (after_modifier_ != Modifier::NONE &&
after_modifier_ != type.get()->get_modifier()) {
after_modifier_ != type_after_modifier) {
return false;
}
annotation_ = annotation;
type_ = type;
before_modifier_ = before_modifier;
after_modifier_ = type.get()->get_modifier();
after_modifier_ = type_after_modifier;
return true;
}
@ -335,7 +340,7 @@ public:
TypeDefinition(Node node, SymbolDocs &&docs, bool is_on_heap,
const Identifier &name, std::vector<Identifier> &&typeclasses,
std::vector<Identifier> &&arguments,
std::optional<TypeProxy> &type)
std::optional<TypeProxy> type)
: Node(node), docs_(std::move(docs)), is_on_heap_(is_on_heap),
name_(name), typeclasses_(typeclasses),
arguments_(std::move(arguments)), type_(std::move(type)) {}