tipc
A TIP to LLVM compiler
Substituter.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "TipTypeVisitor.h"
4 
7 class Substituter : public TipTypeVisitor {
8  TipVar *target;
9  std::shared_ptr<TipType> substitution;
10 
11 protected:
12  std::vector<std::shared_ptr<TipType>> visitedTypes;
13  Substituter() = default;
14 
15 public:
16  Substituter(TipVar *t, std::shared_ptr<TipType> s)
17  : target(t), substitution(s) {}
18 
32  static std::shared_ptr<TipType> substitute(TipType *t, TipVar *v,
33  std::shared_ptr<TipType> s);
34 
35  std::shared_ptr<TipType> getResult();
36 
37  virtual void endVisit(TipAlpha *element) override;
38  virtual void endVisit(TipFunction *element) override;
39  virtual void endVisit(TipInt *element) override;
40  virtual void endVisit(TipMu *element) override;
41  virtual void endVisit(TipRecord *element) override;
42  virtual void endVisit(TipAbsentField *element) override;
43  virtual void endVisit(TipRef *element) override;
44  virtual void endVisit(TipVar *element) override;
45 };
Produces a type with designated variable substitutions.
Definition: Substituter.h:7
Substituter()=default
static std::shared_ptr< TipType > substitute(TipType *t, TipVar *v, std::shared_ptr< TipType > s)
Substitute for instances of variable in a target type.
Definition: Substituter.cpp:7
Substituter(TipVar *t, std::shared_ptr< TipType > s)
Definition: Substituter.h:16
virtual void endVisit(TipAlpha *element) override
Definition: Substituter.cpp:89
std::shared_ptr< TipType > getResult()
Definition: Substituter.cpp:14
std::vector< std::shared_ptr< TipType > > visitedTypes
Definition: Substituter.h:12
A proper type representing an absent record field.
Definition: TipAbsentField.h:12
Class for free type variables.
Definition: TipAlpha.h:10
A proper type representing a function.
Definition: TipFunction.h:14
A proper type representing an int.
Definition: TipInt.h:12
Class representing a recursive type.
Definition: TipMu.h:12
A proper type representing a record.
Definition: TipRecord.h:14
A proper type representing a reference.
Definition: TipRef.h:10
Base class for TIP type visitors.
Definition: TipTypeVisitor.h:24
Abstract base class of all types.
Definition: TipType.h:19
Class representing a type variable.
Definition: TipVar.h:13