Skip to content

Can't create use new <constructor> of classes with leading given clauses #12344

Closed
@japgolly

Description

@japgolly

Compiler version

3.0.0-RC3

Minimized code

import scala.quoted.*

class C(using q: Quotes)(i: Int = 1, f: q.reflect.Flags = q.reflect.Flags.EmptyFlags)

def test1a(using q: Quotes) = new C()
def test2a(using q: Quotes) = new C(1)
def test3a(using q: Quotes) = new C(1, q.reflect.Flags.Lazy)
def test4a(using q: Quotes) = new C(f = q.reflect.Flags.Lazy)

def test1b(using q: Quotes) = C()
def test2b(using q: Quotes) = C(1)
def test3b(using q: Quotes) = C(1, q.reflect.Flags.Lazy)
def test4b(using q: Quotes) = C(f = q.reflect.Flags.Lazy)

def test1c(using q: Quotes) = new C(using q)()
def test2c(using q: Quotes) = new C(using q)(1)
def test3c(using q: Quotes) = new C(using q)(1, q.reflect.Flags.Lazy)
def test4c(using q: Quotes) = new C(using q)(f = q.reflect.Flags.Lazy)

def test1d(using q: Quotes) = C(using q)()
def test2d(using q: Quotes) = C(using q)(1)
def test3d(using q: Quotes) = C(using q)(1, q.reflect.Flags.Lazy)
def test4d(using q: Quotes) = C(using q)(f = q.reflect.Flags.Lazy)

Output

[error] -- Error: a.scala:5:30 ----------------
[error] 5 |def test1a(using q: Quotes) = new C()
[error]   |                              ^^^^^^^
[error]   |                            missing arguments for constructor C in class C
[error] -- Error: a.scala:6:36 ----------------
[error] 6 |def test2a(using q: Quotes) = new C(1)
[error]   |                                    ^
[error]   |too many arguments for constructor C in class C: ()(using q: quoted.Quotes)(i: Int, f: q.reflect.Flags): C
[error] -- Error: a.scala:7:36 ----------------
[error] 7 |def test3a(using q: Quotes) = new C(1, q.reflect.Flags.Lazy)
[error]   |                                    ^
[error]   |too many arguments for constructor C in class C: ()(using q: quoted.Quotes)(i: Int, f: q.reflect.Flags): C
[error] -- Error: a.scala:8:38 ----------------
[error] 8 |def test4a(using q: Quotes) = new C(f = q.reflect.Flags.Lazy)
[error]   |                                    ^^^^^^^^^^^^^^^^^^^^^^^^
[error]   |constructor C in class C: ()(using q: quoted.Quotes)(i: Int, f: q.reflect.Flags): C does not have a parameter f
[error] -- Error: a.scala:10:30 ---------------
[error] 10 |def test1b(using q: Quotes) = C()
[error]    |                              ^^^
[error]    |                          missing arguments for constructor C in class C
[error] -- Error: a.scala:11:32 ---------------
[error] 11 |def test2b(using q: Quotes) = C(1)
[error]    |                                ^
[error]    |too many arguments for constructor C in class C: ()(using q: quoted.Quotes)(i: Int, f: q.reflect.Flags): C
[error] -- Error: a.scala:12:32 ---------------
[error] 12 |def test3b(using q: Quotes) = C(1, q.reflect.Flags.Lazy)
[error]    |                                ^
[error]    |too many arguments for constructor C in class C: ()(using q: quoted.Quotes)(i: Int, f: q.reflect.Flags): C
[error] -- Error: a.scala:13:34 ---------------
[error] 13 |def test4b(using q: Quotes) = C(f = q.reflect.Flags.Lazy)
[error]    |                                ^^^^^^^^^^^^^^^^^^^^^^^^
[error]    |constructor C in class C: ()(using q: quoted.Quotes)(i: Int, f: q.reflect.Flags): C does not have a parameter f
[error] -- Error: a.scala:15:34 ---------------
[error] 15 |def test1c(using q: Quotes) = new C(using q)()
[error]    |                                  ^^^^^^^^^^
[error]    |wrong number of arguments at <no phase> for (using q: quoted.Quotes): Int @uncheckedVariance: (C.$lessinit$greater$default$2 : 
[error]    |  (using q: quoted.Quotes): Int @uncheckedVariance
[error]    |), expected: 1, found: 0
[error] -- Error: a.scala:16:34 ---------------
[error] 16 |def test2c(using q: Quotes) = new C(using q)(1)
[error]    |                                  ^^^^^^^^^^
[error]    |wrong number of arguments at <no phase> for (using q: quoted.Quotes): q.reflect.Flags: (C.$lessinit$greater$default$3 : (using q: quoted.Quotes): q.reflect.Flags), expected: 1, found: 0
[error] -- Error: a.scala:18:34 ---------------
[error] 18 |def test4c(using q: Quotes) = new C(using q)(f = q.reflect.Flags.Lazy)
[error]    |                                  ^^^^^^^^^^
[error]    |wrong number of arguments at <no phase> for (using q: quoted.Quotes): Int @uncheckedVariance: (C.$lessinit$greater$default$2 : 
[error]    |  (using q: quoted.Quotes): Int @uncheckedVariance
[error]    |), expected: 1, found: 0
[error] -- Error: a.scala:20:30 ---------------
[error] 20 |def test1d(using q: Quotes) = C(using q)()
[error]    |                              ^^^^^^^^^^
[error]    |wrong number of arguments at <no phase> for (using q: quoted.Quotes): Int @uncheckedVariance: (C.$lessinit$greater$default$2 : 
[error]    |  (using q: quoted.Quotes): Int @uncheckedVariance
[error]    |), expected: 1, found: 0
[error] -- Error: a.scala:21:30 ---------------
[error] 21 |def test2d(using q: Quotes) = C(using q)(1)
[error]    |                              ^^^^^^^^^^
[error]    |wrong number of arguments at <no phase> for (using q: quoted.Quotes): q.reflect.Flags: (C.$lessinit$greater$default$3 : (using q: quoted.Quotes): q.reflect.Flags), expected: 1, found: 0
[error] -- Error: a.scala:23:30 ---------------
[error] 23 |def test4d(using q: Quotes) = C(using q)(f = q.reflect.Flags.Lazy)
[error]    |                              ^^^^^^^^^^
[error]    |wrong number of arguments at <no phase> for (using q: quoted.Quotes): Int @uncheckedVariance: (C.$lessinit$greater$default$2 : 
[error]    |  (using q: quoted.Quotes): Int @uncheckedVariance
[error]    |), expected: 1, found: 0
[error] 14 errors found

Expectation

Everything should compile. Only test3c and test3d compile.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions