tipc
A TIP to LLVM compiler
|
Visits AST and checks that all field accesses are to defined fields. More...
#include <AbsentFieldChecker.h>
Public Member Functions | |
AbsentFieldChecker (Unifier *u) | |
void | endVisit (ASTAccessExpr *element) override |
Check that the accessed field is defined somewhere in the program. More... | |
![]() | |
virtual bool | visit (ASTProgram *element) |
virtual void | endVisit (ASTProgram *element) |
virtual bool | visit (ASTFunction *element) |
virtual void | endVisit (ASTFunction *element) |
virtual bool | visit (ASTNumberExpr *element) |
virtual void | endVisit (ASTNumberExpr *element) |
virtual bool | visit (ASTVariableExpr *element) |
virtual void | endVisit (ASTVariableExpr *element) |
virtual bool | visit (ASTBinaryExpr *element) |
virtual void | endVisit (ASTBinaryExpr *element) |
virtual bool | visit (ASTInputExpr *element) |
virtual void | endVisit (ASTInputExpr *element) |
virtual bool | visit (ASTFunAppExpr *element) |
virtual void | endVisit (ASTFunAppExpr *element) |
virtual bool | visit (ASTAllocExpr *element) |
virtual void | endVisit (ASTAllocExpr *element) |
virtual bool | visit (ASTRefExpr *element) |
virtual void | endVisit (ASTRefExpr *element) |
virtual bool | visit (ASTDeRefExpr *element) |
virtual void | endVisit (ASTDeRefExpr *element) |
virtual bool | visit (ASTNullExpr *element) |
virtual void | endVisit (ASTNullExpr *element) |
virtual bool | visit (ASTFieldExpr *element) |
virtual void | endVisit (ASTFieldExpr *element) |
virtual bool | visit (ASTRecordExpr *element) |
virtual void | endVisit (ASTRecordExpr *element) |
virtual bool | visit (ASTAccessExpr *element) |
virtual bool | visit (ASTDeclNode *element) |
virtual void | endVisit (ASTDeclNode *element) |
virtual bool | visit (ASTDeclStmt *element) |
virtual void | endVisit (ASTDeclStmt *element) |
virtual bool | visit (ASTAssignStmt *element) |
virtual void | endVisit (ASTAssignStmt *element) |
virtual bool | visit (ASTWhileStmt *element) |
virtual void | endVisit (ASTWhileStmt *element) |
virtual bool | visit (ASTIfStmt *element) |
virtual void | endVisit (ASTIfStmt *element) |
virtual bool | visit (ASTOutputStmt *element) |
virtual void | endVisit (ASTOutputStmt *element) |
virtual bool | visit (ASTReturnStmt *element) |
virtual void | endVisit (ASTReturnStmt *element) |
virtual bool | visit (ASTErrorStmt *element) |
virtual void | endVisit (ASTErrorStmt *element) |
virtual bool | visit (ASTBlockStmt *element) |
virtual void | endVisit (ASTBlockStmt *element) |
Static Public Member Functions | |
static void | check (ASTProgram *p, Unifier *u) |
Generate and check absent field constraints and report any errors. More... | |
Visits AST and checks that all field accesses are to defined fields.
This visitor performs a post-order traversal to analyze field accesses either on the LHS or RHS of an assignment. It uses the computed type information to determine whether the access is to a field that has been defined by some record expression in the program. This is a flow insensitive check.
Errors are reported by throwing SemanticError exceptions.
|
inline |
|
static |
Generate and check absent field constraints and report any errors.
p | The Program AST |
u | The unifier storing the computed type judgements |
|
overridevirtual |
Check that the accessed field is defined somewhere in the program.
This check is a bit less nuanced than in the TIP scala implementation. We simply report absent field accesses and do not distinguish reads from writes.
Reimplemented from ASTVisitor.