summaryrefslogtreecommitdiff
path: root/tiger-compiler/src/type/named.cc
diff options
context:
space:
mode:
authorMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:07:58 +0200
committerMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:07:58 +0200
commit967be9e750221ab2ab783f95df79bb26d290a45e (patch)
tree6802900a5e975f9f68b169f0f503f040056d6952 /tiger-compiler/src/type/named.cc
add: added projectsHEADmain
Diffstat (limited to 'tiger-compiler/src/type/named.cc')
-rw-r--r--tiger-compiler/src/type/named.cc61
1 files changed, 61 insertions, 0 deletions
diff --git a/tiger-compiler/src/type/named.cc b/tiger-compiler/src/type/named.cc
new file mode 100644
index 0000000..ff092f6
--- /dev/null
+++ b/tiger-compiler/src/type/named.cc
@@ -0,0 +1,61 @@
+/**
+ ** \file type/named.cc
+ ** \brief Implementation for type/named.hh.
+ */
+
+#include <type/named.hh>
+#include <type/visitor.hh>
+#include <vector>
+
+namespace type
+{
+ Named::Named(misc::symbol name)
+ : name_(name)
+ , type_(nullptr)
+ {}
+
+ Named::Named(misc::symbol name, const Type* type)
+ : name_(name)
+ , type_(type)
+ {}
+
+ // Inherited functions
+ void Named::accept(ConstVisitor& v) const
+ {
+ // FIXME DONE: Some code was deleted here.
+ v(*this);
+ }
+
+ void Named::accept(Visitor& v)
+ {
+ // FIXME DONE: Some code was deleted here.
+ v(*this);
+ }
+
+ bool Named::sound() const
+ {
+ // FIXME DONE: Some code was deleted here (Sound).
+ auto reference = dynamic_cast<const Named*>(type_);
+ std::vector<const Named*> previous;
+
+ while (reference != nullptr)
+ {
+ if (std::ranges::find(previous, reference) != previous.end())
+ {
+ return false;
+ }
+
+ previous.push_back(reference);
+ reference = dynamic_cast<const Named*>(reference->type_get());
+ }
+
+ return true;
+ }
+
+ bool Named::compatible_with(const Type& other) const
+ {
+ // FIXME DONE: Some code was deleted here (Special implementation of "compatible_with" for Named).
+ return type_->compatible_with(other);
+ }
+
+} // namespace type