Loading...
Searching...
No Matches
visitor.hpp
Go to the documentation of this file.
1
2#pragma once
3
4#include "core/ast/node.hpp"
5#include "core/ast/src.hpp"
8
9namespace by {
10
11 class retStateExpr;
12#define X(T) class T;
13#include "visitee.inl"
14#undef X
15
61 class _nout visitor: public tworker<void, node> {
64
65 public:
66 visitor();
67 visitor(nbool isReturnable);
68
69 public:
75 void setReturnable(nbool isReturnable);
76 nbool isReturnable() const;
77
78#define X(T) \
79 virtual void visit(const visitInfo& i, T& me); \
80 virtual nbool onVisit(const visitInfo& i, T& me, nbool alreadyVisited); \
81 virtual void onLeave(const visitInfo& i, T& me, nbool alreadyVisited);
82#include "visitee.inl"
83#undef X
84
85 virtual void visit(const visitInfo& i, node& me);
86 virtual nbool onVisit(const visitInfo& i, node& me, nbool alreadyVisited);
87 virtual void onLeave(const visitInfo& i, node& me, nbool alreadyVisited);
88
89 // traverse:
90 // generalized-way:
91 // @ return false if the node is already visited.
92 virtual void onTraverse(const visitInfo& i, node& me);
93 // specific-way:
94 virtual void onTraverse(const visitInfo& i, asExpr& a);
95 virtual void onTraverse(const visitInfo& i, assignExpr& a);
96 virtual void onTraverse(const visitInfo& i, blockExpr& b);
97 virtual void onTraverse(const visitInfo& i, defVarExpr& d);
98 virtual void onTraverse(const visitInfo& i, FBOExpr& f);
99 virtual void onTraverse(const visitInfo& i, getExpr& e);
100 virtual void onTraverse(const visitInfo& i, retExpr& b);
101 virtual void onTraverse(const visitInfo& i, evalExpr& e);
102 virtual void onTraverse(evalExpr& e, node& subject);
103 virtual void onTraverse(const visitInfo& i, func& f);
104 virtual void onTraverse(const visitInfo& i, frame& f);
105 virtual void onTraverse(const visitInfo& i, forExpr& f);
106 virtual void onTraverse(const visitInfo& i, retStateExpr& r);
107 virtual void onTraverse(const visitInfo& i, ifExpr& f);
108 virtual void onTraverse(const visitInfo& i, whileExpr& w);
109 virtual void onTraverse(const visitInfo& i, defArrayExpr& d);
110 virtual void onTraverse(const visitInfo& i, defNestedFuncExpr& e);
111 virtual void onTraverse(const visitInfo& i, genericOrigin& g);
112 virtual void onTraverse(const visitInfo& i, obj& o);
113
114 protected:
115 void _onWork() override;
116 void _prepare() override;
117
118 private:
122 nbool _markVisited(node& me);
123 void _rel();
124
125 private:
126 // value will be true if key is visited func or obj:
127 // obj usually has huge subs and was chained to its subpod. but subpod also has the
128 // obj as its one of subs, so visitor will fall in the infinite recursive loop.
129 // to prevent it, I prepare a map instance. that map will return true if the key,
130 // func or obj, already got visited.
131 std::map<node*, nbool> _visited;
132 nbool _isReturnable;
133 };
134} // namespace by
Fundamental Binary Operator expression.
Definition FBOExpr.hpp:18
Type casting expression.
Definition asExpr.hpp:17
Assignment expression.
Definition assignExpr.hpp:19
Block expression.
Definition blockExpr.hpp:24
Array literal expression.
Definition defArrayExpr.hpp:18
Nested function definition expression.
Definition defNestedFuncExpr.hpp:13
Variable definition expression base class.
Definition defVarExpr.hpp:18
Function/method call expression.
Definition evalExpr.hpp:15
For loop expression.
Definition forExpr.hpp:15
Execution frame.
Definition frame.hpp:52
Function definition in byeol language.
Definition func.hpp:38
Definition genericOrigin.hpp:25
Expression for property and method access.
Definition getExpr.hpp:18
If conditional expression.
Definition ifExpr.hpp:14
Base class for all AST nodes in the byeol language.
Definition node.hpp:195
Byeol runtime environment object.
Definition obj.hpp:62
Return statement expression.
Definition retExpr.hpp:15
Base class for keywords that exit blockExpr.
Definition retStateExpr.hpp:31
Definition tnarr.hpp:9
Base worker template for processing tasks.
Definition tworker.hpp:58
Visitor context information.
Definition visitInfo.hpp:11
Base visitor class for AST traversal.
Definition visitor.hpp:61
void setReturnable(nbool isReturnable)
void _prepare() override
Protected virtual method for preparation before starting the work.
While loop expression.
Definition whileExpr.hpp:13
to Top