diff options
author | Paul Phillips <paulp@improving.org> | 2013-01-09 12:18:50 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2013-01-09 12:28:57 -0800 |
commit | 198d5229967367493960a6b4e0f9c382d7122a25 (patch) | |
tree | 98dd0c2cfe624baae0534b0d9926292b2cff4e18 /test | |
parent | 816bcdf382ea0469f6c5eadcff44901921ba6075 (diff) | |
download | scala-198d5229967367493960a6b4e0f9c382d7122a25.tar.gz scala-198d5229967367493960a6b4e0f9c382d7122a25.tar.bz2 scala-198d5229967367493960a6b4e0f9c382d7122a25.zip |
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.
Diffstat (limited to 'test')
-rw-r--r-- | test/files/pos/CustomGlobal.scala | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/test/files/pos/CustomGlobal.scala b/test/files/pos/CustomGlobal.scala index 30bf227950..a5668bd7c0 100644 --- a/test/files/pos/CustomGlobal.scala +++ b/test/files/pos/CustomGlobal.scala @@ -22,7 +22,7 @@ class CustomGlobal(currentSettings: Settings, reporter: Reporter) extends Global override def newTyper(context: Context): Typer = new CustomTyper(context) class CustomTyper(context : Context) extends Typer(context) { - override def typed(tree: Tree, mode: Int, pt: Type): Tree = { + override def typed(tree: Tree, mode: Mode, pt: Type): Tree = { if (tree.summaryString contains "Bippy") println("I'm typing a Bippy! It's a " + tree.shortClass + ".") |