Skip to content

Commit 341d5f9

Browse files
committed
alternative design with a class - cleaner bytecode and less duplication
1 parent 20680b5 commit 341d5f9

File tree

2 files changed

+3
-9
lines changed

2 files changed

+3
-9
lines changed

compiler/src/dotty/tools/dotc/ast/Desugar.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,9 +1597,8 @@ object desugar {
15971597
AppliedTypeTree(ref(defn.NamedTupleTypeRef), namesTuple :: tup :: Nil)
15981598
else
15991599
val Builder_apply = Select(Select(ref(defn.NamedTupleModule), nme.NamedTupleBuilder), nme.apply)
1600-
val build = Select(ref(defn.NamedTupleModule), nme.build)
16011600
val builder = TypeApply(Builder_apply, namesTuple :: Nil)
1602-
Apply(Apply(build, builder :: Nil), tup :: Nil)
1601+
Apply(Select(builder, nme.build), tup :: Nil)
16031602

16041603
/** When desugaring a list pattern arguments `elems` adapt them and the
16051604
* expected type `pt` to each other. This means:

library/src/scala/NamedTuple.scala

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,8 @@ object NamedTuple:
1919

2020
def unapply[N <: Tuple, V <: Tuple](x: NamedTuple[N, V]): Some[V] = Some(x)
2121

22-
object NamedTupleBuilder:
23-
opaque type Builder[N <: Tuple] = Unit
24-
25-
@annotation.compileTimeOnly("NamedTupleBuilder.apply should be used as the argument to NamedTuple.build")
26-
def apply[N <: Tuple]: Builder[N] = ???
27-
28-
extension [N <: Tuple](inline builder: NamedTupleBuilder.Builder[N])
22+
@annotation.compileTimeOnly("NamedTupleBuilder.Builder should have been eliminated by calling the build method.")
23+
final class NamedTupleBuilder[N <: Tuple]():
2924
inline def build[V <: Tuple](inline x: V): NamedTuple[N, V] = x
3025

3126
extension [V <: Tuple](x: V)

0 commit comments

Comments
 (0)