summaryrefslogtreecommitdiff
path: root/test/files/neg/names-defaults-neg.scala
blob: b326d3b5bddc0449f8757e045aa3d56834871834 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
object Test extends App {
  // TESTS

  // re-ordering
  test1(b = 2, a = "#")

  // mixing named and positional
  test1(b = "(*", 23)

  // assignment / names
  var x = 0
  var y = 0
  test2(x = 1)
  test2(y = 1)
  test1(c = 0, b = "joke")
  test7((m = 1))  // named arguments must be top-level assignments
  test7({m = 1})
  test7 { m = 1 } // no named arguments in argument block
  test8(x = 1)

  // argument specified twice
  test1(1, a = 2)
  test1(b = 1, b = "2")

  // error message when there are too many argument lists (not very nice..)
  test3(b = 3, a = 1)(3)



  // overloading resolution
  object t1 {
    def f(a: Int, b: String) = "first"
    def f(b: String, a: Int) = "second"
  }
  t1.f(b = "dkljf", a = 1)


  object t3 {
    def f(a1: Int) = "first"
    def f(a2: Int)(b: Int) = "second"
  }
  t3.f(1)
  t3.f(1)(2)

  object t7 {
    def g(a: C, b: Int*) = "third"
    def g(a: B) = "fourth"
  }
  t7.g(new C()) // ambiguous reference

  // vararg
  def test5(a: Int, b: String*) = a
  test5(a = 1, b = "dkjl", b = "dkj")
  test5(1, "2", b = 3)
  test5(b = "dlkj")

  object t8 {
    def f(a: Int, b: Object) = "first"
    def f(b: String, a: Int) = "second"
  }
  println(t8.f(a = 0, b = "1")) // ambiguous reference


  // case class copy does not exist if there's a vararg
  val fac = Fact(1)(2, 3)
  val facc = fac.copy(b = "dlkfj")()

  // no defaults in patterns
  A1() match { case A1(_) => () }


  // return types of default getters

  // definition compiles, but default cannot  be used, it doesn't conform
  def test4[T[P]](x: T[T[List[T[X forSome { type X }]]]] = List(1,2)) = x
  test4()

  // doesn't compile
  def test6[T](x: List[List[T]] = List(1,2)) = x

  // correct error message
  new A2[String]()

  object t3648 {
    class C(val s: String = "")
    object C extends C()
  }

  // deprecated names
  def deprNam1(x: Int, @deprecatedName('x) y: String) = 0
  def deprNam2(a: String)(@deprecatedName('a) b: Int) = 1
  def deprNam3(@deprecatedName('x) a: Int, @deprecatedName('y) b: Int) = a + b
  deprNam3(y = 10, b = 2)

  def deprNam4(@deprecatedName('deprNam4Arg) deprNam4Arg: String) = 0
  deprNam4(deprNam4Arg = null)
  def deprNam5(@deprecatedName deprNam5Arg: String) = 0
  deprNam5(deprNam5Arg = null)

  // t3818
  def f3818(x: Int = 1, y: Int, z: Int = 1) = 0
  f3818(y = 1, m = 1)

  // DEFINITIONS
  def test1(a: Int, b: String) = a +": "+ b
  def test2(x: Unit) = println("test2")
  def test3(a: Int, b: Int) = a + b
  def test7(m: Int) = m
  def test8[T](x: => T) = println("test8")
}

class B {
  def foo(a: Int) = a
  def bar(u: String = "ldksj") = u
}

class C extends B {
  override def foo(a: Int = 1092) = a
  def foo(b: String = "lskdfj")

  def bar(i: Int = 129083) = i
}

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 = _)
}

object t3685 {
  object t { def f(x: Int) = x }

  def t1 { def x = t.f(x = 1) }
  def t2 { val x = t.f(x = 1) }
  def t3 { var x = t.f(x = 1) }
  object t4 { def x = t.f(x = 1) }
  object t5 { val x = t.f(x = 1) }
  object t6 { var x = t.f(x = 1) }
  class t7 { def x = t.f(x = 1) }
  class t8 { val x = t.f(x = 1) }
  class t9 { var x = t.f(x = 1) }

  def t10 { def x: Int = t.f(x = 1) }
  def t11 { val x: Int = t.f(x = 1) }
  def t12 { var x: Int = t.f(x = 1) }
  class t13 { def x: Int = t.f(x = 1) }
  class t14 { val x: Int = t.f(x = 1) }
  class t15 { var x: Int = t.f(x = 1) }


  object u { def f[T](x: T) = 100 }

  def u1 { def x = u.f(x = 1) }
  def u2 { val x = u.f(x = 1) }
  def u3 { var x = u.f(x = 1) }
  def u4 { def x = u.f(x = "23") }
  def u5 { val x = u.f(x = "32") }
  def u6 { var x = u.f(x = "32") }
  def u7 { def x: Int = u.f(x = 1) }
  def u8 { val x: Int = u.f(x = 1) }
  def u9 { var x: Int = u.f(x = 1) }
  def u10 { def x: Int = u.f(x = "32") }
  def u11 { val x: Int = u.f(x = "32") }
  def u12 { var x: Int = u.f(x = "32") }

  class u13 { def x = u.f(x = 1) }
  class u14 { val x = u.f(x = 1) }
  class u15 { var x = u.f(x = 1) }
  class u16 { def x: Int = u.f(x = 1) }
  class u17 { val x: Int = u.f(x = 1) }
  class u18 { var x: Int = u.f(x = 1) }
  class u19 { def x: Int = u.f(x = "32") }
  class u20 { val x: Int = u.f(x = "32") }
  class u21 { var x: Int = u.f(x = "32") }
}