summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-11-17 13:12:31 +0000
committerMartin Odersky <odersky@gmail.com>2009-11-17 13:12:31 +0000
commit79cbdefa47d77b6785b614b895dc03ede84a7328 (patch)
treef68fc8ca3d9f617c85a219bf25cb444308e41146
parent9aafbff378c3721cdc98ce3e9266950c3f443770 (diff)
downloadscala-79cbdefa47d77b6785b614b895dc03ede84a7328.tar.gz
scala-79cbdefa47d77b6785b614b895dc03ede84a7328.tar.bz2
scala-79cbdefa47d77b6785b614b895dc03ede84a7328.zip
Allow implicit modifier on single-parameter fun...
Allow implicit modifier on single-parameter function literals. Fixes and closes #1492.
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala10
-rw-r--r--test/files/pos/implicits.scala14
2 files changed, 23 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index a4f228cffb..356f4621a4 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -957,7 +957,7 @@ self =>
*/
def statement(location: Int): Tree = expr(location) // !!! still needed?
- /** Expr ::= (Bindings | Id | `_') `=>' Expr
+ /** Expr ::= (Bindings | [`implicit'] Id | `_') `=>' Expr
* | Expr1
* ResultExpr ::= (Bindings | Id `:' CompoundType) `=>' Block
* | Expr1
@@ -1057,6 +1057,14 @@ self =>
atPos(in.skipToken()) {
Throw(expr())
}
+ case IMPLICIT =>
+ val start = in.skipToken()
+ val param0 = convertToParam(atPos(in.offset)(Ident(ident())))
+ val param = treeCopy.ValDef(param0, param0.mods | Flags.IMPLICIT, param0.name, param0.tpt, param0.rhs)
+ atPos(start, in.offset) {
+ accept(ARROW)
+ Function(List(param), if (location != InBlock) expr() else block())
+ }
case _ =>
var t = postfixExpr()
if (in.token == EQUALS) {
diff --git a/test/files/pos/implicits.scala b/test/files/pos/implicits.scala
index aeb6591507..485d24101e 100644
--- a/test/files/pos/implicits.scala
+++ b/test/files/pos/implicits.scala
@@ -1,3 +1,17 @@
+// #1435
+object t1435 {
+ implicit def a(s:String):String = error("")
+ implicit def a(i:Int):String = error("")
+ implicit def b(i:Int):String = error("")
+}
+
+class C1435 {
+ val v:String = {
+ import t1435.a
+ 2
+ }
+}
+
// #1579
object Test1579 {
class Column