diff options
author | Martin Odersky <odersky@gmail.com> | 2006-11-16 14:22:08 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2006-11-16 14:22:08 +0000 |
commit | 466db7220a4325c84d43cc55c517d0cb8240310d (patch) | |
tree | faebfa44380e8ebea7f0609d55ccf5e369d44bfb | |
parent | cb7711db82c381848a6571047c68145e4f2d3c46 (diff) | |
download | scala-466db7220a4325c84d43cc55c517d0cb8240310d.tar.gz scala-466db7220a4325c84d43cc55c517d0cb8240310d.tar.bz2 scala-466db7220a4325c84d43cc55c517d0cb8240310d.zip |
fixed bug798, 800
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Namers.scala | 1 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 13 | ||||
-rw-r--r-- | test/files/neg/bug798.check | 4 | ||||
-rw-r--r-- | test/files/neg/bug798.scala | 9 | ||||
-rw-r--r-- | test/files/neg/bug800.check | 13 | ||||
-rw-r--r-- | test/files/neg/bug800.scala | 17 |
6 files changed, 53 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index c527bb981b..29af968d2a 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -335,6 +335,7 @@ trait Namers requires Analyzer { if (settings.debug.value) log("defining " + sym); val tp = typeSig(tree) sym.setInfo(tp) + if (sym.isType) typer.checkNonCyclic(sym) if (settings.debug.value) log("defined " + sym); validate(sym) } diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 1b1b1823a3..ff4c5f75d4 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -845,6 +845,8 @@ trait Typers requires Analyzer { val value = vdef.symbol val getter = if (mods hasFlag DEFERRED) value else value.getter(value.owner) assert(getter != NoSymbol, stat) + if (getter hasFlag OVERLOADED) + error(getter.pos, ""+getter+" is defined twice") val getterDef: DefDef = { val result = DefDef(getter, vparamss => if (mods hasFlag DEFERRED) EmptyTree @@ -855,11 +857,14 @@ trait Typers requires Analyzer { result } def setterDef: DefDef = { + val setr = getter.setter(value.owner) val result = atPos(vdef.pos)( - DefDef(getter.setter(value.owner), vparamss => - if (mods hasFlag DEFERRED) EmptyTree - else typed(Assign(Select(This(value.owner), value), - Ident(vparamss.head.head))))) + DefDef(setr, vparamss => + if ((mods hasFlag DEFERRED) || (setr hasFlag OVERLOADED)) + EmptyTree + else + typed(Assign(Select(This(value.owner), value), + Ident(vparamss.head.head))))) result.mods setAttr vdef.mods.attributes result } diff --git a/test/files/neg/bug798.check b/test/files/neg/bug798.check new file mode 100644 index 0000000000..6fd80bcba5 --- /dev/null +++ b/test/files/neg/bug798.check @@ -0,0 +1,4 @@ +bug798.scala:5 error: cyclic aliasing or subtyping involving type Bracks + type Bracks <: Bracks + ^ +one error found diff --git a/test/files/neg/bug798.scala b/test/files/neg/bug798.scala new file mode 100644 index 0000000000..9d95ae2ddb --- /dev/null +++ b/test/files/neg/bug798.scala @@ -0,0 +1,9 @@ +package test; +trait Test { + def f(list : Any) = null; + class C[T] + type Bracks <: Bracks + val bracks : Bracks; + val singletons = f(bracks); + +} diff --git a/test/files/neg/bug800.check b/test/files/neg/bug800.check new file mode 100644 index 0000000000..eae84677c9 --- /dev/null +++ b/test/files/neg/bug800.check @@ -0,0 +1,13 @@ +bug800.scala:4 error: qualification is already defined as value qualification + val qualification = false; + ^ +bug800.scala:8 error: method qualification is defined twice + val qualification = false; + ^ +bug800.scala:12 error: value qualification is defined twice + var qualification = false; + ^ +bug800.scala:16 error: method qualification is defined twice + var qualification = false; + ^ +four errors found diff --git a/test/files/neg/bug800.scala b/test/files/neg/bug800.scala new file mode 100644 index 0000000000..388574d42d --- /dev/null +++ b/test/files/neg/bug800.scala @@ -0,0 +1,17 @@ +package test; +trait Test1 { + val qualification : String; + val qualification = false; +} +trait Test2 { + var qualification : String; + val qualification = false; +} +trait Test3 { + val qualification : String; + var qualification = false; +} +trait Test4 { + var qualification : String; + var qualification = false; +} |