diff options
author | Martin Odersky <odersky@gmail.com> | 2005-06-16 13:16:57 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2005-06-16 13:16:57 +0000 |
commit | 3cabc3d6df5f86542d87d833a0cddc543ff8a9a2 (patch) | |
tree | b947736a47b977aa3d2c05a045ba80452b652ddf /sources | |
parent | ebe1c8f2722d7cd644cda2122856aaa1660675f6 (diff) | |
download | scala-3cabc3d6df5f86542d87d833a0cddc543ff8a9a2.tar.gz scala-3cabc3d6df5f86542d87d833a0cddc543ff8a9a2.tar.bz2 scala-3cabc3d6df5f86542d87d833a0cddc543ff8a9a2.zip |
*** empty log message ***
Diffstat (limited to 'sources')
-rwxr-xr-x | sources/scala/tools/nsc/typechecker/Typers.scala | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/sources/scala/tools/nsc/typechecker/Typers.scala b/sources/scala/tools/nsc/typechecker/Typers.scala index 95e67bba77..f931cd4606 100755 --- a/sources/scala/tools/nsc/typechecker/Typers.scala +++ b/sources/scala/tools/nsc/typechecker/Typers.scala @@ -548,17 +548,22 @@ abstract class Typers: Analyzer { copy.AliasTypeDef(tdef, tdef.mods, tdef.name, tparams1, rhs1) setType NoType } + private def enterLabelDef(stat: Tree): unit = stat match { + case ldef @ LabelDef(_, _, _) => + if (ldef.symbol == NoSymbol) + ldef.symbol = namer.enterInScope( + context.owner.newLabel(ldef.pos, ldef.name) setInfo MethodType(List(), UnitClass.tpe)); + case _ => + } + def typedLabelDef(ldef: LabelDef): LabelDef = { - var lsym = ldef.symbol; - if (lsym == NoSymbol) - lsym = namer.enterInScope( - context.owner.newLabel(ldef.pos, ldef.name) setInfo MethodType(List(), UnitClass.tpe)); val rhs1 = typed(ldef.rhs, UnitClass.tpe); - copy.LabelDef(ldef, ldef.name, ldef.params, rhs1) setSymbol lsym setType UnitClass.tpe + copy.LabelDef(ldef, ldef.name, ldef.params, rhs1) setType UnitClass.tpe } def typedBlock(block: Block, mode: int, pt: Type): Block = { namer.enterSyms(block.stats); + block.stats foreach enterLabelDef; val stats1 = if ((mode & INCONSTRmode) != 0) { val constrCall = typed(block.stats.head, mode, WildcardType); @@ -952,8 +957,14 @@ abstract class Typers: Analyzer { case tdef @ AliasTypeDef(_, _, _, _) => newTyper(context.makeNewScope(tree, sym)).typedAliasTypeDef(tdef) - case ldef @ LabelDef(_, List(), _) => - newTyper(context.makeNewScope(tree, context.owner)).typedLabelDef(ldef) + case ldef @ LabelDef(_, _, _) => + var lsym = ldef.symbol; + var typer1 = this; + if (lsym == NoSymbol) { // labeldef is part of template + typer1 = newTyper(context.makeNewScope(tree, context.owner)); + typer1.enterLabelDef(ldef); + } + typer1.typedLabelDef(ldef) case Attributed(attr, defn) => val attr1 = typed(attr, AttributeClass.tpe); |