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

Check if left hand side of assignment is an l-value. More...

#include <CheckAssignable.h>

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

Public Member Functions

 CheckAssignable ()=default
 
virtual void endVisit (ASTAssignStmt *element) override
 
virtual void endVisit (ASTRefExpr *element) override
 
- 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 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 void endVisit (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 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)
 

Detailed Description

Check if left hand side of assignment is an l-value.

The left-hand side of an assignment statement must be able to express an l-value (i.e., an address). In TIP the only expressions that can be l-values are:

See also
VariableExpr
DeRefExpr
AccessExpr

Assignability is also required when using the "&E" expression. We can only take the address of an expression if it has an l-value.

This weeding pass checks where l-value expressions are required and throws a SemanticError otherwise.

Constructor & Destructor Documentation

◆ CheckAssignable()

CheckAssignable::CheckAssignable ( )
default

Member Function Documentation

◆ check()

void CheckAssignable::check ( ASTProgram p)
static

◆ endVisit() [1/2]

void CheckAssignable::endVisit ( ASTAssignStmt element)
overridevirtual

Reimplemented from ASTVisitor.

◆ endVisit() [2/2]

void CheckAssignable::endVisit ( ASTRefExpr element)
overridevirtual

Reimplemented from ASTVisitor.


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