diff options
Diffstat (limited to 'src/dotty/tools/dotc/core/TyperState.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/TyperState.scala | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/core/TyperState.scala b/src/dotty/tools/dotc/core/TyperState.scala new file mode 100644 index 000000000..e90070253 --- /dev/null +++ b/src/dotty/tools/dotc/core/TyperState.scala @@ -0,0 +1,43 @@ +package dotty.tools +package dotc +package core + +import Types._ +import Flags._ +import Contexts._ +import util.SimpleMap + +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 +} + +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) +} |