summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2010-06-16 18:38:02 +0000
committerLukas Rytz <lukas.rytz@epfl.ch>2010-06-16 18:38:02 +0000
commitfd9ddea91f21ede82cb9083c24e91c3b47da178b (patch)
tree2d8251f2c9ebf34d0d2e7386264675207104ab61
parent59dc9f40bda5a1958f9187714f68568b039e0bcb (diff)
downloadscala-fd9ddea91f21ede82cb9083c24e91c3b47da178b.tar.gz
scala-fd9ddea91f21ede82cb9083c24e91c3b47da178b.tar.bz2
scala-fd9ddea91f21ede82cb9083c24e91c3b47da178b.zip
removed integration of placeholder syntax and n...
removed integration of placeholder syntax and named arguments. review by odersky
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala17
-rw-r--r--test/files/neg/names-defaults-neg.check19
-rw-r--r--test/files/neg/names-defaults-neg.scala13
-rw-r--r--test/files/run/names-defaults.check21
-rw-r--r--test/files/run/names-defaults.scala24
5 files changed, 45 insertions, 49 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index 0bfee7cdd8..e28f07e840 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -1363,25 +1363,10 @@ self =>
}
}
- // if arg has the form "x$1 => a = x$1" it's treated as "a = x$1" with x$1
- // in placeholderParams. This allows e.g. "val f: Int => Int = foo(a = 1, b = _)"
- def convertArg(arg: Tree): Tree = arg match {
- case Function(
- List(vd @ ValDef(mods, pname1, ptype1, EmptyTree)),
- Assign(Ident(aname), rhs)) if (mods hasFlag Flags.SYNTHETIC) =>
- rhs match {
- case Ident(`pname1`) | Typed(Ident(`pname1`), _) =>
- placeholderParams = vd :: placeholderParams
- atPos(arg.pos) { AssignOrNamedArg(Ident(aname), Ident(pname1)) }
- case _ => arg
- }
- case _ => arg
- }
-
if (in.token == LBRACE)
List(blockExpr())
else
- surround(LPAREN, RPAREN)(if (in.token == RPAREN) List() else (args() map convertArg), List())
+ surround(LPAREN, RPAREN)(if (in.token == RPAREN) List() else args(), List())
}
/** BlockExpr ::= `{' (CaseClauses | Block) `}'
diff --git a/test/files/neg/names-defaults-neg.check b/test/files/neg/names-defaults-neg.check
index 644aad4a89..38bacc0888 100644
--- a/test/files/neg/names-defaults-neg.check
+++ b/test/files/neg/names-defaults-neg.check
@@ -37,8 +37,8 @@ names-defaults-neg.scala:23: error: parameter specified twice: b
test1(b = 1, b = "2")
^
names-defaults-neg.scala:26: error: {
- val x$1: Int(3) = 3;
- val x$2: Int(1) = 1;
+ val x$5: Int(3) = 3;
+ val x$6: Int(1) = 1;
Test.this.test3(1, 3)
} of type Int does not take parameters
test3(b = 3, a = 1)(3)
@@ -104,4 +104,17 @@ names-defaults-neg.scala:82: error: type mismatch;
Error occurred in an application involving default arguments.
new A2[String]()
^
-24 errors found
+names-defaults-neg.scala:115: error: reference to var2 is ambiguous; it is both, a parameter
+name of the method and the name of a variable currently in scope.
+ delay(var2 = 40)
+ ^
+names-defaults-neg.scala:118: error: missing parameter type for expanded function ((x$1) => a = x$1)
+ val taf2: Int => Unit = testAnnFun(a = _, b = get("+"))
+ ^
+names-defaults-neg.scala:119: error: parameter specified twice: a
+ val taf3 = testAnnFun(b = _: String, a = get(8))
+ ^
+names-defaults-neg.scala:120: error: wrong number of parameters; expected = 2
+ val taf4: (Int, String) => Unit = testAnnFun(_, b = _)
+ ^
+28 errors found
diff --git a/test/files/neg/names-defaults-neg.scala b/test/files/neg/names-defaults-neg.scala
index 3babd56c6f..e73dc71c9b 100644
--- a/test/files/neg/names-defaults-neg.scala
+++ b/test/files/neg/names-defaults-neg.scala
@@ -106,3 +106,16 @@ case class Fact(a: Int, b: String)(c: Int*)
case class A1(x: Int = 1, y: String = "2")
class A2[T](a: T = 1)
+
+
+// anonymous functions
+object anfun {
+ var var2 = 0
+ def delay(var2: => Unit) { var2 }
+ delay(var2 = 40)
+
+ def testAnnFun(a: Int, b: String) = println(a +": "+ b)
+ val taf2: Int => Unit = testAnnFun(a = _, b = get("+"))
+ val taf3 = testAnnFun(b = _: String, a = get(8))
+ val taf4: (Int, String) => Unit = testAnnFun(_, b = _)
+}
diff --git a/test/files/run/names-defaults.check b/test/files/run/names-defaults.check
index 60c7637e3d..b4effa26d2 100644
--- a/test/files/run/names-defaults.check
+++ b/test/files/run/names-defaults.check
@@ -28,23 +28,10 @@ get: 5
5: %, 17
12: ', 13, 16
1: bird, swine, 10
+20
+30
+40
6: ~
-get: 7
-get: +
-7: +
-get: +
-get: 8
-8: +
-9: ?
-get: 39
-get: 38
-get: |
-10: |, 77
-get: 2.233
-get: <
-get: 13
-get: x
-13: x, 2.233, <
14: /
100: 100: nix, nix, 982, 982, 0
100: overridden, bla, 0, 0, 555
@@ -87,8 +74,6 @@ lskf2dkflj2
dlkd5nixda10nixdadklfj1dklfj
C(dlkf,234,struct)struct???
C(dflkj,234,Some(209))None!!
-20020100
-C(dlfkj,11,10)35dlkf
dflk10
1-1jupee
12.39
diff --git a/test/files/run/names-defaults.scala b/test/files/run/names-defaults.scala
index ee9186c35f..f197d2ff11 100644
--- a/test/files/run/names-defaults.scala
+++ b/test/files/run/names-defaults.scala
@@ -20,16 +20,20 @@ object Test extends Application {
// anonymous functions
- val f1: (Int, String) => Unit = test1(_, _); f1(6, "~")
- val f2: Int => Unit = test1(a = _, b = get("+")); f2(get(7))
- val f3 = test1(b = _: String, a = get(8)); f3(get("+"))
- val f4: (Int, String) => Unit = test1(_, b = _); f4(9, "?")
+ {
+ def doMod(f: Int => Unit) { f(20) }
+ var var1 = 0
+ doMod(var1 = _)
+ println(var1)
- val f5: Int => (String, Int) => Unit = test2(v = get(38), u = _)_
- f5(get(39))(get("|"), 10)
+ synchronized(var1 = 30)
+ println(var1)
- val f6: (Double, String) => Unit = test3(get(13), _)(d = _, c = get("x"))
- f6(get(2.233), get("<"))
+ var var2 = 0
+ def delay(var2: => Int) = { var2 }
+ println(delay(var2 = 40))
+ }
+ val f1: (Int, String) => Unit = test1(_, _); f1(6, "~")
test4(14)
@@ -151,10 +155,6 @@ object Test extends Application {
println(c1.print)
val c2 = C("dflkj", c = Some(209): Option[Int])(None, "!!")
println(c2.print)
- val a_f: String => A[String, Nothing] = new A[String, Nothing](b = _)(d = 100)
- println(a_f("20").print)
- val c_f: Int => C[Int] = C("dlfkj", c = 10, b = _)(35, e = "dlkf")
- println(c_f(11).print)
// "super" qualifier