mgdType.hpp
Go to the documentation of this file.
1
2#pragma once
3
4#include "core/ast/params.hpp"
5#include "core/type/ntype.hpp"
6
7namespace by {
8
9 class node;
10 template <typename T, typename TACTIC> class tnarr;
11 typedef tnarr<node, strTactic> narr;
12
17 class _nout mgdType: public ntype, public clonable {
18 BY(ME(mgdType, ntype), CLONE(mgdType))
19
20 public:
21 mgdType(const std::string& name, const type& super, const params& ps);
22 mgdType(const std::string& name, const type& super, const params& ps, nbool isAdt, const node* ret);
23 mgdType(const std::string& name, const types& supersFromRhs);
24
25 private:
26 mgdType(const std::string& name, const types& supers, const types& subs, const params& ps, nbool isAdt);
27
28 public:
29 nbool isTemplate() const override;
30 nbool isAbstract() const override;
31 const type& getSuper() const override;
32 const nbool& isInit() const override;
33 const std::string& getName() const override;
34
35 ncnt size() const override;
36
37 void onCloneDeep(const clonable& from) override;
38
39 using super::getParams;
40 params& getParams() override;
41
42 const node* getRet() const override;
43
44 using super::setRet;
45 void setRet(const node& new1) override;
46
47 // TODO: getSubs(), getLeafs()
48
49 void* make() const override;
50
51 protected:
52 types& _getSupers() override;
53 types& _getSubs() override;
54 type& _getStatic() const override;
55 types** _onGetLeafs() const override;
56
57 private:
58 void _initSupers(const type& super);
59
60 private:
61 std::string _name;
62 types _supers;
63 types _subs;
64 params _params;
65 nbool _isAdt;
66 str _ret;
67 };
68} // namespace by
Interface for objects that can be cloned.
Definition: clonable.hpp:12
Managed type for byeol objects.
Definition: mgdType.hpp:17
void * make() const override
create an instance to be refered this type.
Base class for all AST nodes in byeol language.
Definition: node.hpp:30
Native type system for byeol language.
Definition: ntype.hpp:19
Function parameter list container.
Definition: params.hpp:15
Base class for runtime type information in byeol language.
Definition: type.hpp:12