diff options
author | Paul Phillips <paulp@improving.org> | 2012-03-14 13:06:06 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-03-14 13:06:06 -0700 |
commit | 1c061e5931ccc39090d955e3bc18dd0a1e48df84 (patch) | |
tree | 4e351e3c3f3efa5a8e63c3d79bcb665d21d25630 /src/compiler/scala/tools/nsc/typechecker/Namers.scala | |
parent | a127aae2a5fbae146ea81e470541209436222970 (diff) | |
parent | 54e284d669418ebc6445bd0ec66804b9067f6dd3 (diff) | |
download | scala-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.scala | 43 |
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 = ( |