summaryrefslogtreecommitdiff
path: root/sources/scala/tools/nsc/typechecker/Typers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2005-06-16 13:16:57 +0000
committerMartin Odersky <odersky@gmail.com>2005-06-16 13:16:57 +0000
commit3cabc3d6df5f86542d87d833a0cddc543ff8a9a2 (patch)
treeb947736a47b977aa3d2c05a045ba80452b652ddf /sources/scala/tools/nsc/typechecker/Typers.scala
parentebe1c8f2722d7cd644cda2122856aaa1660675f6 (diff)
downloadscala-3cabc3d6df5f86542d87d833a0cddc543ff8a9a2.tar.gz
scala-3cabc3d6df5f86542d87d833a0cddc543ff8a9a2.tar.bz2
scala-3cabc3d6df5f86542d87d833a0cddc543ff8a9a2.zip
*** empty log message ***
Diffstat (limited to 'sources/scala/tools/nsc/typechecker/Typers.scala')
-rwxr-xr-xsources/scala/tools/nsc/typechecker/Typers.scala25
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);