summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2007-05-29 17:13:30 +0000
committerMartin Odersky <odersky@gmail.com>2007-05-29 17:13:30 +0000
commitc2a6b222c1a886a41d595d9d202761123e6d1629 (patch)
tree641cb767ba2eeec995bed7701516c609dce5abca
parentd6be8533eec6e88f1be58a135c96a0ba214d6a77 (diff)
downloadscala-c2a6b222c1a886a41d595d9d202761123e6d1629.tar.gz
scala-c2a6b222c1a886a41d595d9d202761123e6d1629.tar.bz2
scala-c2a6b222c1a886a41d595d9d202761123e6d1629.zip
fixed bug1034
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala7
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala11
2 files changed, 12 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index 66168724b0..51b53dff76 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -1134,11 +1134,12 @@ trait Parsers {
case DOT =>
simpleExprRest(atPos(inSkipToken) { selector(stripParens(t)) }, true)
case LBRACKET =>
- t match {
+ val t1 = stripParens(t)
+ t1 match {
case Ident(_) | Select(_, _) =>
- simpleExprRest(atPos(inCurrentPos) { TypeApply(t, typeArgs(false)) }, true)
+ simpleExprRest(atPos(inCurrentPos) { TypeApply(t1, typeArgs(false)) }, true)
case _ =>
- t
+ t1
}
case LPAREN | LBRACE if (canApply) =>
simpleExprRest(atPos(inCurrentPos) { Apply(stripParens(t), argumentExprs()) }, true)
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 7b6d84acb8..3e87dbcc7d 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -605,6 +605,13 @@ trait Typers requires Analyzer {
setError(tree)
}
case _ =>
+ def applyPossible = {
+ def applyMeth = member(adaptToName(tree, nme.apply), nme.apply)
+ if ((mode & TAPPmode) != 0)
+ tree.tpe.typeParams.isEmpty && applyMeth.filter(! _.tpe.typeParams.isEmpty) != NoSymbol
+ else
+ applyMeth.filter(_.tpe.paramSectionCount > 0) != NoSymbol
+ }
if (tree.isType) {
if ((mode & FUNmode) != 0) {
tree
@@ -655,9 +662,7 @@ trait Typers requires Analyzer {
} else if ((mode & (EXPRmode | FUNmode)) == (EXPRmode | FUNmode) &&
!tree.tpe.isInstanceOf[MethodType] &&
!tree.tpe.isInstanceOf[OverloadedType] &&
- ((mode & TAPPmode) == 0 || tree.tpe.typeParams.isEmpty) &&
- member(adaptToName(tree, nme.apply), nme.apply)
- .filter(m => m.tpe.paramSectionCount > 0) != NoSymbol) { // (8)
+ applyPossible) {
assert((mode & HKmode) == 0) //@M
val qual = adaptToName(tree, nme.apply) match {
case id @ Ident(_) =>