summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Namers.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-03-14 13:06:06 -0700
committerPaul Phillips <paulp@improving.org>2012-03-14 13:06:06 -0700
commit1c061e5931ccc39090d955e3bc18dd0a1e48df84 (patch)
tree4e351e3c3f3efa5a8e63c3d79bcb665d21d25630 /src/compiler/scala/tools/nsc/typechecker/Namers.scala
parenta127aae2a5fbae146ea81e470541209436222970 (diff)
parent54e284d669418ebc6445bd0ec66804b9067f6dd3 (diff)
downloadscala-1c061e5931ccc39090d955e3bc18dd0a1e48df84.tar.gz
scala-1c061e5931ccc39090d955e3bc18dd0a1e48df84.tar.bz2
scala-1c061e5931ccc39090d955e3bc18dd0a1e48df84.zip
Merge remote-tracking branch 'odersky/topic/inline' into merge-inline
Conflicts: lib/scala-compiler.jar.desired.sha1 lib/scala-library-src.jar.desired.sha1 lib/scala-library.jar.desired.sha1 src/compiler/scala/reflect/internal/Definitions.scala src/compiler/scala/reflect/internal/Symbols.scala src/compiler/scala/tools/nsc/Global.scala src/compiler/scala/tools/nsc/transform/Constructors.scala src/compiler/scala/tools/nsc/transform/Erasure.scala src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala src/compiler/scala/tools/nsc/typechecker/Contexts.scala src/compiler/scala/tools/nsc/typechecker/RefChecks.scala src/compiler/scala/tools/nsc/typechecker/SyntheticMethods.scala src/library/scala/Function0.scala src/library/scala/Function1.scala src/library/scala/Function10.scala src/library/scala/Function11.scala src/library/scala/Function12.scala src/library/scala/Function13.scala src/library/scala/Function14.scala src/library/scala/Function15.scala src/library/scala/Function16.scala src/library/scala/Function17.scala src/library/scala/Function18.scala src/library/scala/Function19.scala src/library/scala/Function2.scala src/library/scala/Function20.scala src/library/scala/Function21.scala src/library/scala/Function22.scala src/library/scala/Function3.scala src/library/scala/Function4.scala src/library/scala/Function5.scala src/library/scala/Function6.scala src/library/scala/Function7.scala src/library/scala/Function8.scala src/library/scala/Function9.scala test/files/codelib/code.jar.desired.sha1 test/files/neg/anyval-children-2.check test/files/run/programmatic-main.check
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Namers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala43
1 files changed, 23 insertions, 20 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index 1566897dab..955d51bf8d 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -73,7 +73,7 @@ trait Namers extends MethodSynthesis {
classAndNamerOfModule.clear()
}
- abstract class Namer(val context: Context) extends MethodSynth with NamerContextErrors {
+ abstract class Namer(val context: Context) extends MethodSynth with NamerContextErrors { thisNamer =>
import NamerErrorGen._
val typer = newTyper(context)
@@ -99,6 +99,13 @@ trait Namers extends MethodSynthesis {
owner.unsafeTypeParams foreach (paramContext.scope enter _)
newNamer(paramContext)
}
+
+ def enclosingNamerWithScope(scope: Scope) = {
+ var cx = context
+ while (cx != NoContext && cx.scope != scope) cx = cx.outer
+ if (cx == NoContext || cx == context) thisNamer
+ else newNamer(cx)
+ }
def enterValueParams(vparamss: List[List[ValDef]]): List[List[Symbol]] = {
mmap(vparamss) { param =>
@@ -709,17 +716,17 @@ trait Namers extends MethodSynthesis {
if (needsCycleCheck && !typer.checkNonCyclic(tree.pos, tp))
sym setInfo ErrorType
}
- tree match {
- case ClassDef(_, _, _, impl) =>
- val parentsOK = (
- treeInfo.isInterface(sym, impl.body)
- || (sym eq ArrayClass)
- || (sym isSubClass AnyValClass)
- )
- if (!parentsOK)
- ensureParent(sym, AnyRefClass)
- case _ => ()
- }
+ // tree match {
+ // case ClassDef(_, _, _, impl) =>
+ // val parentsOK = (
+ // treeInfo.isInterface(sym, impl.body)
+ // || (sym eq ArrayClass)
+ // || (sym isSubClass AnyValClass)
+ // )
+ // if (!parentsOK)
+ // ensureParent(sym, AnyRefClass)
+ // case _ => ()
+ // }
}
def moduleClassTypeCompleter(tree: Tree) = {
@@ -1267,7 +1274,10 @@ trait Namers extends MethodSynthesis {
val clazz = tree.symbol
val result = createNamer(tree).classSig(tparams, impl)
clazz setInfo result
- if (clazz.isInlineClass) ensureCompanionObject(cdef)
+ if (clazz.isDerivedValueClass) {
+ clazz setFlag FINAL
+ enclosingNamerWithScope(clazz.owner.info.decls).ensureCompanionObject(cdef)
+ }
result
case ModuleDef(_, _, impl) =>
@@ -1417,13 +1427,6 @@ trait Namers extends MethodSynthesis {
if (sym.info.typeSymbol == FunctionClass(0) && sym.isValueParameter && sym.owner.isCaseClass)
fail(ByNameParameter)
- if (sym.isClass && sym.hasAnnotation(ScalaInlineClass) && !phase.erasedTypes) {
- if (!sym.isSubClass(AnyValClass))
- ensureParent(sym, NotNullClass)
-
- sym setFlag FINAL
- }
-
if (sym.isDeferred) {
// Is this symbol type always allowed the deferred flag?
def symbolAllowsDeferred = (