tipc
A TIP to LLVM compiler
Public Member Functions | Static Public Member Functions | List of all members
AbsentFieldChecker Class Reference

Visits AST and checks that all field accesses are to defined fields. More...

#include <AbsentFieldChecker.h>

Inheritance diagram for AbsentFieldChecker:
Inheritance graph
[legend]
Collaboration diagram for AbsentFieldChecker:
Collaboration graph
[legend]

Public Member Functions

 AbsentFieldChecker (Unifier *u)
 
void endVisit (ASTAccessExpr *element) override
 Check that the accessed field is defined somewhere in the program. More...
 
- Public Member Functions inherited from ASTVisitor
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...
 

Detailed Description

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.

See also
SemanticError

Constructor & Destructor Documentation

◆ AbsentFieldChecker()

AbsentFieldChecker::AbsentFieldChecker ( Unifier u)
inline

Member Function Documentation

◆ check()

AbsentFieldChecker::check ( ASTProgram p,
Unifier u 
)
static

Generate and check absent field constraints and report any errors.

See also
Semantic Error
Parameters
pThe Program AST
uThe unifier storing the computed type judgements

◆ endVisit()

void AbsentFieldChecker::endVisit ( ASTAccessExpr element)
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.


The documentation for this class was generated from the following files: