From 198d5229967367493960a6b4e0f9c382d7122a25 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Wed, 9 Jan 2013 12:18:50 -0800 Subject: Made "mode" into a value class. This is an obvious place to apply value class goodness and collect some safety/sanity in typing modes. It does show off a challenge in introducing value classes without disruption: there's no way to deprecate the old signature of 'typed', 'adapt', etc. because they erase the same. class Bippy(val x: Int) extends AnyVal class A { @deprecated("Use a bippy") def f(x: Int): Int = 5 def f(x: Bippy): Int = x.x } ./a.scala:5: error: double definition: method f:(x: Bippy)Int and method f:(x: Int)Int at line 4 have same type after erasure: (x: Int)Int An Int => Mode implicit handles most uses, but nothing can be done to avoid breaking anything which e.g. extends Typer and overrides typed. --- src/compiler/scala/tools/nsc/package.scala | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/compiler/scala/tools/nsc/package.scala') diff --git a/src/compiler/scala/tools/nsc/package.scala b/src/compiler/scala/tools/nsc/package.scala index 00a9f3b39c..5e8d4f7885 100644 --- a/src/compiler/scala/tools/nsc/package.scala +++ b/src/compiler/scala/tools/nsc/package.scala @@ -6,6 +6,15 @@ package scala.tools package object nsc { + type Mode = scala.reflect.internal.Mode + val Mode = scala.reflect.internal.Mode + + def EXPRmode = Mode.EXPRmode + def BYVALmode = Mode.BYVALmode + def POLYmode = Mode.POLYmode + def TAPPmode = Mode.TAPPmode + def FUNmode = Mode.FUNmode + type Phase = scala.reflect.internal.Phase val NoPhase = scala.reflect.internal.NoPhase -- cgit v1.2.3