summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Typers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2007-04-04 16:30:11 +0000
committerMartin Odersky <odersky@gmail.com>2007-04-04 16:30:11 +0000
commit51d9edec14b5c56f6fc4d283fa27fb7c7d782249 (patch)
tree2ba1165c504cac44b3b1545b8b1274ccf2b05ff9 /src/compiler/scala/tools/nsc/typechecker/Typers.scala
parent7f3c7c392467b128af32d416edf521f468caf34c (diff)
downloadscala-51d9edec14b5c56f6fc4d283fa27fb7c7d782249.tar.gz
scala-51d9edec14b5c56f6fc4d283fa27fb7c7d782249.tar.bz2
scala-51d9edec14b5c56f6fc4d283fa27fb7c7d782249.zip
explicit supercalls + new style for syntax + ba...
explicit supercalls + new style for syntax + backquoted ids in patterns
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 084ed5df2e..b54d378eb7 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -416,6 +416,15 @@ trait Typers requires Analyzer {
}
}
+ /** The typer for an expression, depending on where we are. If we are before a superclass
+ * call, this is a typer over a constructor context; otherwise it is the current typer.
+ */
+ def exprTyper(inConstr: boolean): Typer =
+ if (inConstr) newTyper(context.makeConstructorContext) else this
+
+ def valDefRhsTyper(vdef: ValDef): Typer =
+ newTyper(context.make(vdef, vdef.symbol)).exprTyper(vdef.mods hasFlag PRESUPER)
+
/** <p>
* Post-process an identifier or selection node, performing the following:
* </p>
@@ -994,7 +1003,7 @@ trait Typers requires Analyzer {
error(vdef.pos, "local variables must be initialized")
vdef.rhs
} else {
- newTyper(context.make(vdef, sym)).transformedOrTyped(vdef.rhs, tpt1.tpe)
+ valDefRhsTyper(vdef).transformedOrTyped(vdef.rhs, tpt1.tpe)
}
copy.ValDef(vdef, vdef.mods, vdef.name, tpt1, checkDead(rhs1)) setType NoType
}
@@ -1365,11 +1374,8 @@ trait Typers requires Analyzer {
checkNoDoubleDefs(List.mapConserve(stats)(typedStat))
}
- def typedArg(arg: Tree, mode: int, newmode: int, pt: Type): Tree = {
- val argTyper = if ((mode & SCCmode) != 0) newTyper(context.makeConstructorContext)
- else this
- checkDead(argTyper.typed(arg, mode & stickyModes | newmode, pt))
- }
+ def typedArg(arg: Tree, mode: int, newmode: int, pt: Type): Tree =
+ checkDead(exprTyper((mode & SCCmode) != 0).typed(arg, mode & stickyModes | newmode, pt))
def typedArgs(args: List[Tree], mode: int) =
List.mapConserve(args)(arg => typedArg(arg, mode, 0, WildcardType))