aboutsummaryrefslogblamecommitdiff
path: root/src/dotty/tools/dotc/core/TyperState.scala
blob: 89589c164cfc972d74a305e1bb65d106c38d42a8 (plain) (tree)
1
2
3
4
5
6
7
8
9







                     
                                    
















                                                                              

                                                              
















                                                                       






                                                                    
 
package dotty.tools
package dotc
package core

import Types._
import Flags._
import Contexts._
import util.SimpleMap
import reporting.Reporter.Diagnostic

class TyperState extends DotClass {

  /** The current constraint set */
  def constraint: Constraint = new Constraint(SimpleMap.Empty)

  /** The currently uninstantiated TypeVars */
  def undetVars: List[TypeVar] = Nil

  /** The currently outstanding errors, warnings, or infos */
  def diagnostics: List[Diagnostic] = Nil

  def constraint_=(c: Constraint): Unit = {}
  def undetVars_=(vs: List[TypeVar]): Unit = unsupported("undetVars_=")
  def diagnostics_=(ds: List[Diagnostic]): Unit = unsupported("diagnostics_=")

  def fresh: TyperState = this

  def copyFrom(tp: TyperState): Unit = unsupported("copyFrom")
}

class MutableTyperState (previous: TyperState) extends TyperState {

  private var myConstraint: Constraint = previous.constraint
  private var myUndetVars: List[TypeVar] = previous.undetVars
  private var myDiagnostics: List[Diagnostic] = Nil

  override def constraint = myConstraint
  override def undetVars = myUndetVars
  override def diagnostics = myDiagnostics

  override def constraint_=(c: Constraint) = myConstraint = c
  override def undetVars_=(vs: List[TypeVar]) = myUndetVars = vs
  override def diagnostics_=(ds: List[Diagnostic]) = myDiagnostics = ds

  override def fresh: TyperState = new MutableTyperState(this)

  override def copyFrom(state: TyperState): Unit = {
    constraint = state.constraint
    undetVars = state.undetVars
    // todo: do something about diagnostics (put reporter in state?)
  }

}