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
20 class _nout verifier: public visitor {
21 BY(CLASS(verifier, visitor))
22 friend struct ::verifierTest;
23 friend class genericOrigin;
24
25 public:
26 using super::onLeave;
27 using super::onVisit;
28 void onLeave(const visitInfo& i, node& me, nbool) override;
29 void onLeave(const visitInfo& i, asExpr& me, nbool) override;
30 void onLeave(const visitInfo& i, isExpr& me, nbool) override;
31 void onLeave(const visitInfo& i, assignExpr& me, nbool) override;
32 nbool onVisit(const visitInfo& i, blockExpr& me, nbool) override;
33 void onLeave(const visitInfo& i, blockExpr& me, nbool) override;
34 void onLeave(const visitInfo& i, defVarExpr& me, nbool) override;
35 void onLeave(const visitInfo& i, defPropExpr& me, nbool) override;
36 void onLeave(const visitInfo& i, defAssignExpr& me, nbool) override;
37 void onLeave(const visitInfo& i, defSeqExpr& me, nbool) override;
38 void onLeave(const visitInfo& i, defArrayExpr& me, nbool) override;
39 void onLeave(const visitInfo& i, defNestedFuncExpr& me, nbool) override;
40 void onLeave(const visitInfo& i, FBOExpr& me, nbool) override;
41 void onLeave(const visitInfo& i, FUOExpr& me, nbool) override;
42 void onLeave(const visitInfo& i, getExpr& me, nbool) override;
43 void onLeave(const visitInfo& i, retExpr& me, nbool) override;
44 void onLeave(const visitInfo& i, runExpr& me, nbool) override;
45 void onTraverse(runExpr& me, node& subject) override;
46 nbool onVisit(const visitInfo& i, func& me, nbool) override;
47 void onLeave(const visitInfo& i, func& me, nbool) override;
48 nbool onVisit(const visitInfo& i, closure& me, nbool) override;
49 void onLeave(const visitInfo& i, closure& me, nbool) override;
50 nbool onVisit(const visitInfo& i, ctor& me, nbool) override;
51 void onLeave(const visitInfo& i, ctor& me, nbool) override;
52 nbool onVisit(const visitInfo& i, baseObj& me, nbool) override;
53 void onLeave(const visitInfo& i, baseObj& me, nbool) override;
54 nbool onVisit(const visitInfo& i, genericOrigin& me, nbool) override;
55 void onLeave(const visitInfo& i, genericOrigin& me, nbool) override;
56 nbool onVisit(const visitInfo& i, forExpr& me, nbool) override;
57 void onLeave(const visitInfo& i, forExpr& me, nbool) override;
58 nbool onVisit(const visitInfo& i, whileExpr& me, nbool) override;
59 void onLeave(const visitInfo& i, breakExpr& me, nbool) override;
60 void onLeave(const visitInfo& i, nextExpr& me, nbool) override;
61 nbool onVisit(const visitInfo& i, ifExpr& me, nbool) override;
62 void onLeave(const visitInfo& i, ifExpr& me, nbool) override;
63
64 protected:
65 void _prepare() override;
66 void _onEndWork() override;
67
68 private:
69 std::string _asStr(const params& ps);
70
71 // @param newInfo is not a heap instance.
72 void _verifyMgdFuncImplicitReturn(func& me);
73 void _onLeave(const visitInfo& i, const loopExpr& me);
74
75 private:
76 std::vector<loopExpr*> _recentLoops;
77 std::vector<baseObj*> _orgs;
78 };
79} // namespace by
Fundamental Binary Operation expression.
Definition: FBOExpr.hpp:17
Fundamental Unary Operation expression.
Definition: FUOExpr.hpp:17
Type casting expression.
Definition: asExpr.hpp:16
Assignment expression for variable assignment.
Definition: assignExpr.hpp:16
Base class for all objects in byeol language.
Definition: baseObj.hpp:24
Block expression containing multiple statements.
Definition: blockExpr.hpp:15
Break statement expression.
Definition: breakExpr.hpp:19
func closure with captured object scope
Definition: closure.hpp:19
Constructor function for byeol objects.
Definition: ctor.hpp:11
arr definition expression
Definition: defArrayExpr.hpp:13
Variable definition with assignment expression.
Definition: defAssignExpr.hpp:11
Nested func definition expression (lambda)
Definition: defNestedFuncExpr.hpp:13
Property definition expression.
Definition: defPropExpr.hpp:11
seq definition expression
Definition: defSeqExpr.hpp:14
Variable definition expression base class.
Definition: defVarExpr.hpp:17
For loop expression.
Definition: forExpr.hpp:14
Function definition in byeol language.
Definition: func.hpp:20
Generic type origin with type parameters.
Definition: genericOrigin.hpp:15
Expression for property and method access.
Definition: getExpr.hpp:17
If conditional expression.
Definition: ifExpr.hpp:13
ntype checking expression
Definition: isExpr.hpp:11
Base class for loop expressions.
Definition: loopExpr.hpp:16
Continue statement expression.
Definition: nextExpr.hpp:19
Base class for all AST nodes in byeol language.
Definition: node.hpp:30
Function parameter list container.
Definition: params.hpp:15
Return statement expression.
Definition: retExpr.hpp:14
Function/method call expression.
Definition: runExpr.hpp:14
AST verifier for semantic analysis.
Definition: verifier.hpp:20
Visitor context information.
Definition: visitInfo.hpp:10
Base visitor class for AST traversal.
Definition: visitor.hpp:20
While loop expression.
Definition: whileExpr.hpp:12