3 #include "ast/AstNode.h"
4 #include "ast/DeclContext.h"
5 #include "ast/ExprEvaluator.h"
6 #include "diagnostics/Diagnostics.h"
7 #include "semantic/HierarchyChecker.h"
8 #include "semantic/NameResolver.h"
13 const ast::Decl*
const decl;
14 const ast::Type*
const type;
18 const bool isInstanceVar;
23 bool isInstFieldInitializer;
24 ast::ClassDecl
const* currentClass;
25 ast::ScopeID
const* fieldScope;
26 ExprStaticCheckerState()
27 : isStaticContext{
false},
28 isInstFieldInitializer{
false},
29 currentClass{
nullptr},
30 fieldScope{
nullptr} {}
38 semantic::NameResolver& NR, semantic::HierarchyChecker &HC)
39 : diag{diag}, NR{NR}, state{}, HC{HC}, loc_
{} {}
56 ETy mapValue(ExprValue& node)
const override;
57 ETy evalBinaryOp(BinaryOp& op, ETy lhs, ETy rhs)
const override;
58 ETy evalUnaryOp(UnaryOp& op, ETy rhs)
const override;
59 ETy evalMemberAccess(DotOp& op, ETy lhs, ETy field)
const override;
60 ETy evalMethodCall(MethodOp& op, ETy method,
61 const op_array& args)
const override;
62 ETy evalNewObject(NewOp& op, ETy object,
const op_array& args)
const override;
63 ETy evalNewArray(NewArrayOp& op, ETy type, ETy size)
const override;
64 ETy evalArrayAccess(ArrayAccessOp& op, ETy array, ETy index)
const override;
65 ETy evalCast(CastOp& op, ETy type, ETy value)
const override;
68 void checkInstanceVar(ETy var,
bool checkInitOrder =
true)
const;
69 void isAccessible(ETy lhs, ETy var)
const;
73 semantic::NameResolver& NR;