diff options
author | Martin Odersky <odersky@gmail.com> | 2005-09-23 12:28:07 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2005-09-23 12:28:07 +0000 |
commit | fcc3a4867d2df32377b56c908c46617a92745ce8 (patch) | |
tree | 534c4deb305f19ca3c3a76b3472b87c7dadb868d /sources/scala/tools/nsc/typechecker/Typers.scala | |
parent | 14c330159a76b428b4ca5aa25c112d61836bd79a (diff) | |
download | scala-fcc3a4867d2df32377b56c908c46617a92745ce8.tar.gz scala-fcc3a4867d2df32377b56c908c46617a92745ce8.tar.bz2 scala-fcc3a4867d2df32377b56c908c46617a92745ce8.zip |
*** empty log message ***
Diffstat (limited to 'sources/scala/tools/nsc/typechecker/Typers.scala')
-rwxr-xr-x | sources/scala/tools/nsc/typechecker/Typers.scala | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/sources/scala/tools/nsc/typechecker/Typers.scala b/sources/scala/tools/nsc/typechecker/Typers.scala index 5c2ff01376..b6b07e9ce9 100755 --- a/sources/scala/tools/nsc/typechecker/Typers.scala +++ b/sources/scala/tools/nsc/typechecker/Typers.scala @@ -21,12 +21,14 @@ abstract class Typers: Analyzer { var idcnt = 0; var selcnt = 0; var implcnt = 0; + var impltime = 0l; private val transformed = new HashMap[Tree, Tree]; private val superDefs = new HashMap[Symbol, ListBuffer[Tree]]; - def init = { + def resetTyper: unit = { + resetContexts; transformed.clear; superDefs.clear; } @@ -1032,6 +1034,7 @@ abstract class Typers: Analyzer { val tree1 = if (qual == EmptyTree) tree else atPos(tree.pos)(Select(qual, name)); // atPos necessary because qualifier might come from startContext + //System.out.println("check acc: " + defSym + " " + pre);//DEBUG stabilize(checkAccessible(tree1, defSym, pre, qual), pre, mode, pt) } @@ -1163,7 +1166,7 @@ abstract class Typers: Analyzer { val enclFun = if (tree.symbol != NoSymbol) tree.symbol else context.owner.enclMethod; if (!enclFun.isMethod || enclFun.isConstructor) errorTree(tree, "return outside method definition") - else if (!context.owner.hasFlag(INITIALIZED)) + else if (!context.owner.isInitialized) errorTree(tree, "method " + context.owner + " has return statement; needs result type") else { val expr1: Tree = typed(expr, enclFun.tpe.finalResultType); @@ -1230,7 +1233,7 @@ abstract class Typers: Analyzer { if (sym != NoSymbol) fun1 = adapt(fun1 setSymbol sym setType pre.memberType(sym), funmode, WildcardType) } - appcnt = appcnt + 1; + if (util.Statistics.enabled) appcnt = appcnt + 1; typedApply(fun1, args) } @@ -1268,7 +1271,7 @@ abstract class Typers: Analyzer { typedSelect(qual1, nme.CONSTRUCTOR); case Select(qual, name) => - selcnt = selcnt + 1; + if (util.Statistics.enabled) selcnt = selcnt + 1; var qual1 = typedQualifier(qual); if (name.isTypeName) qual1 = checkStable(qual1); typedSelect(qual1, name); @@ -1401,7 +1404,6 @@ abstract class Typers: Analyzer { private def typedImplicit(pos: int, info: ImplicitInfo, pt: Type, local: boolean): Tree = if (isCompatible(depoly(info.tpe), pt)) { - implcnt = implcnt + 1; var tree: Tree = EmptyTree; def fail(reason: String): Tree = { if (settings.debug.value) @@ -1424,6 +1426,9 @@ abstract class Typers: Analyzer { private def inferImplicit(pos: int, pt: Type, isView: boolean, reportAmbiguous: boolean): Tree = { + if (util.Statistics.enabled) implcnt = implcnt + 1; + val startTime = if (util.Statistics.enabled) System.currentTimeMillis() else 0l; + def isBetter(sym1: Symbol, tpe1: Type, sym2: Symbol, tpe2: Type): boolean = sym2.isError || (sym1.owner != sym2.owner) && (sym1.owner isSubClass sym2.owner) && (tpe1 matches tpe2); @@ -1478,6 +1483,7 @@ abstract class Typers: Analyzer { var tree = searchImplicit(context.implicitss, true); if (tree == EmptyTree) tree = searchImplicit(implicitsOfType(pt.widen), false); + if (util.Statistics.enabled) impltime = impltime + System.currentTimeMillis() - startTime; tree } |