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

Produces a type with designated variable substitutions. More...

#include <Substituter.h>

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

Public Member Functions

 Substituter (TipVar *t, std::shared_ptr< TipType > s)
 
std::shared_ptr< TipTypegetResult ()
 
virtual void endVisit (TipAlpha *element) override
 
virtual void endVisit (TipFunction *element) override
 
virtual void endVisit (TipInt *element) override
 
virtual void endVisit (TipMu *element) override
 
virtual void endVisit (TipRecord *element) override
 
virtual void endVisit (TipAbsentField *element) override
 
virtual void endVisit (TipRef *element) override
 
virtual void endVisit (TipVar *element) override
 Substitute if variable is the target. More...
 
- Public Member Functions inherited from TipTypeVisitor
virtual bool visit (TipAlpha *element)
 
virtual bool visit (TipFunction *element)
 
virtual bool visit (TipInt *element)
 
virtual bool visit (TipMu *element)
 
virtual bool visit (TipRecord *element)
 
virtual bool visit (TipAbsentField *element)
 
virtual bool visit (TipRef *element)
 
virtual bool visit (TipVar *element)
 

Static Public Member Functions

static std::shared_ptr< TipTypesubstitute (TipType *t, TipVar *v, std::shared_ptr< TipType > s)
 Substitute for instances of variable in a target type. More...
 

Protected Member Functions

 Substituter ()=default
 

Protected Attributes

std::vector< std::shared_ptr< TipType > > visitedTypes
 

Detailed Description

Produces a type with designated variable substitutions.

Constructor & Destructor Documentation

◆ Substituter() [1/2]

Substituter::Substituter ( )
protecteddefault

◆ Substituter() [2/2]

Substituter::Substituter ( TipVar t,
std::shared_ptr< TipType s 
)
inline

Member Function Documentation

◆ endVisit() [1/8]

void Substituter::endVisit ( TipAbsentField element)
overridevirtual

Reimplemented from TipTypeVisitor.

◆ endVisit() [2/8]

void Substituter::endVisit ( TipAlpha element)
overridevirtual

Reimplemented from TipTypeVisitor.

Reimplemented in FreshAlphaCopier, and Copier.

◆ endVisit() [3/8]

void Substituter::endVisit ( TipFunction element)
overridevirtual

Reimplemented from TipTypeVisitor.

◆ endVisit() [4/8]

void Substituter::endVisit ( TipInt element)
overridevirtual

Reimplemented from TipTypeVisitor.

◆ endVisit() [5/8]

void Substituter::endVisit ( TipMu element)
overridevirtual

Reimplemented from TipTypeVisitor.

◆ endVisit() [6/8]

void Substituter::endVisit ( TipRecord element)
overridevirtual

Reimplemented from TipTypeVisitor.

◆ endVisit() [7/8]

void Substituter::endVisit ( TipRef element)
overridevirtual

Reimplemented from TipTypeVisitor.

◆ endVisit() [8/8]

void Substituter::endVisit ( TipVar element)
overridevirtual

Substitute if variable is the target.

Reimplemented from TipTypeVisitor.

Reimplemented in Copier.

◆ getResult()

std::shared_ptr< TipType > Substituter::getResult ( )

◆ substitute()

std::shared_ptr< TipType > Substituter::substitute ( TipType t,
TipVar v,
std::shared_ptr< TipType s 
)
static

Substitute for instances of variable in a target type.

This function requires the substitution to be a shared_ptr so that it can be directly substituted for the variable without having to be reconstructed. This simplifies things when the substitution is a complex type expression. It does lead to a bit of asymmetry in the API and it will lead to sharing among type expressions, which is why we use shared_ptrs.

Parameters
tThe type on which substitution is performed.
vThe target variable.
sThe subtitution.
Returns
An equivalent type with no occurrences of the target variable.

Member Data Documentation

◆ visitedTypes

std::vector<std::shared_ptr<TipType> > Substituter::visitedTypes
protected

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