Loading...
Searching...
No Matches
verifier.hpp
Go to the documentation of this file.
1
2#pragma once
3
5#include "core/ast/params.hpp"
7
8struct verifierTest;
9
10namespace by {
11
12 class loopExpr;
13 class thread;
14 class endExpr;
15
84 class _nout verifier: public visitor {
86 friend struct ::verifierTest;
87
88 public:
89 using super::onLeave;
90 using super::onVisit;
91 void onLeave(const visitInfo& i, node& me, nbool) override;
92 void onLeave(const visitInfo& i, asExpr& me, nbool) override;
93 void onLeave(const visitInfo& i, isExpr& me, nbool) override;
94 void onLeave(const visitInfo& i, assignExpr& me, nbool) override;
95 nbool onVisit(const visitInfo& i, blockExpr& me, nbool) override;
96 void onLeave(const visitInfo& i, blockExpr& me, nbool) override;
97 void onLeave(const visitInfo& i, defVarExpr& me, nbool) override;
98 void onLeave(const visitInfo& i, defPropExpr& me, nbool) override;
99 void onLeave(const visitInfo& i, defAssignExpr& me, nbool) override;
100 void onLeave(const visitInfo& i, defSeqExpr& me, nbool) override;
101 void onLeave(const visitInfo& i, defArrayExpr& me, nbool) override;
102 void onLeave(const visitInfo& i, defNestedFuncExpr& me, nbool) override;
103 void onLeave(const visitInfo& i, FBOExpr& me, nbool) override;
104 void onLeave(const visitInfo& i, FUOExpr& me, nbool) override;
105 void onLeave(const visitInfo& i, getExpr& me, nbool) override;
106 void onLeave(const visitInfo& i, retExpr& me, nbool) override;
107 void onLeave(const visitInfo& i, evalExpr& me, nbool) override;
108 void onTraverse(evalExpr& me, node& subject) override;
109 nbool onVisit(const visitInfo& i, func& me, nbool) override;
110 void onLeave(const visitInfo& i, func& me, nbool) override;
111 nbool onVisit(const visitInfo& i, closure& me, nbool) override;
112 void onLeave(const visitInfo& i, closure& me, nbool) override;
113 nbool onVisit(const visitInfo& i, ctor& me, nbool) override;
114 void onLeave(const visitInfo& i, ctor& me, nbool) override;
115 nbool onVisit(const visitInfo& i, baseObj& me, nbool) override;
116 void onLeave(const visitInfo& i, baseObj& me, nbool) override;
117 nbool onVisit(const visitInfo& i, genericOrigin& me, nbool) override;
118 void onLeave(const visitInfo& i, genericOrigin& me, nbool) override;
119 nbool onVisit(const visitInfo& i, forExpr& me, nbool) override;
120 void onLeave(const visitInfo& i, forExpr& me, nbool) override;
121 nbool onVisit(const visitInfo& i, whileExpr& me, nbool) override;
122 void onLeave(const visitInfo& i, breakExpr& me, nbool) override;
123 void onLeave(const visitInfo& i, nextExpr& me, nbool) override;
124 nbool onVisit(const visitInfo& i, ifExpr& me, nbool) override;
125 void onLeave(const visitInfo& i, ifExpr& me, nbool) override;
126
127 protected:
128 void _prepare() override;
129 void _onEndWork() override;
130
131 private:
132 std::string _asStr(const params& ps);
133
134 // @param newInfo is not a heap instance.
135 void _verifyMgdFuncImplicitReturn(func& me);
136 void _onLeave(const visitInfo& i, const loopExpr& me);
137
138 private:
139 std::vector<loopExpr*> _recentLoops;
140 std::vector<baseObj*> _orgs;
141 };
142} // namespace by
Fundamental Binary Operator expression.
Definition FBOExpr.hpp:18
Fundamental Unary Operator expression.
Definition FUOExpr.hpp:17
Type casting expression.
Definition asExpr.hpp:17
Assignment expression.
Definition assignExpr.hpp:19
Base class for representing byeol objects.
Definition baseObj.hpp:73
Block expression.
Definition blockExpr.hpp:24
Break statement expression.
Definition breakExpr.hpp:21
func closure with captured object scope
Definition closure.hpp:20
Constructor function for byeol objects.
Definition ctor.hpp:12
Array literal expression.
Definition defArrayExpr.hpp:18
Variable definition with assignment expression.
Definition defAssignExpr.hpp:12
Nested function definition expression.
Definition defNestedFuncExpr.hpp:13
Property definition expression.
Definition defPropExpr.hpp:12
Sequence definition expression.
Definition defSeqExpr.hpp:18
Variable definition expression base class.
Definition defVarExpr.hpp:18
Function/method call expression.
Definition evalExpr.hpp:15
For loop expression.
Definition forExpr.hpp:15
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
ntype checking expression
Definition isExpr.hpp:12
Base class for loop expressions.
Definition loopExpr.hpp:17
Continue statement expression.
Definition nextExpr.hpp:21
Base class for all AST nodes in the byeol language.
Definition node.hpp:195
Function parameter list container.
Definition params.hpp:16
Return statement expression.
Definition retExpr.hpp:15
Definition tnarr.hpp:9
AST verifier for semantic analysis.
Definition verifier.hpp:84
void _onEndWork() override
Protected virtual method called after the work is completed.
void _prepare() override
Protected virtual method for preparation before starting the work.
Visitor context information.
Definition visitInfo.hpp:11
Base visitor class for AST traversal.
Definition visitor.hpp:61
While loop expression.
Definition whileExpr.hpp:13
to Top