Skip to content

Commit b1999ae

Browse files
committed
Remove StructI
Fixes #53
1 parent 83710ea commit b1999ae

File tree

5 files changed

+35
-49
lines changed

5 files changed

+35
-49
lines changed

core/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarkShape.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import scala.annotation.nowarn
77

88
case class div_t(quot: Int, rem: Int)
99

10-
@nowarn("msg=unused explicit parameter")
1110
trait BindingsBenchmarkShape(val s: Slinc):
1211
import scala.language.unsafeNulls
1312
import s.{given, *}

core/src/fr/hammons/slinc/Slinc.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ trait Slinc:
1515
given tm: TransitionModule
1616
given rwm: ReadWriteModule
1717

18-
protected val structI = new StructI
1918
val typesI = types.TypesI.platformTypes
2019
protected val scopeI = ScopeI(scopePlatformSpecific)
2120
protected val libraryI = LibraryI(libraryIPlatformSpecific)
@@ -24,7 +23,6 @@ trait Slinc:
2423
export libraryI.*
2524
export Convertible.as
2625
export PotentiallyConvertible.maybeAs
27-
export structI.Struct
2826
export scopeI.given
2927
export container.ContextProof.given
3028

core/src/fr/hammons/slinc/Struct.scala

Lines changed: 35 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,9 @@ import modules.DescriptorModule
1212
import fr.hammons.slinc.modules.TransitionModule
1313
import fr.hammons.slinc.modules.ReadWriteModule
1414

15-
class StructI(using DescriptorModule, TransitionModule, ReadWriteModule):
16-
/** Summons up Descriptors for the members of Product A
17-
*
18-
* @tparam A
19-
* The product type to summon a list of descriptors for
20-
* @return
21-
* List[TypeDescriptor]
22-
*/
15+
trait Struct[A <: Product] extends DescriptorOf[A], MethodCompatible[A]
16+
17+
object Struct:
2318
private inline def memberDescriptors[A](using
2419
m: Mirror.ProductOf[A]
2520
): List[TypeDescriptor] =
@@ -83,43 +78,40 @@ class StructI(using DescriptorModule, TransitionModule, ReadWriteModule):
8378
inline EmptyTuple match
8479
case a: A => a
8580

86-
trait Struct[A <: Product] extends DescriptorOf[A], MethodCompatible[A]
87-
88-
object Struct:
89-
inline def derived[A <: Product](using
90-
m: Mirror.ProductOf[A],
91-
ct: ClassTag[A]
92-
) = new Struct[A]:
93-
val descriptor: StructDescriptor = StructDescriptor(
94-
memberDescriptors[A].view
95-
.zip(memberNames[A])
96-
.map(StructMemberDescriptor.apply)
97-
.toList,
98-
ct.runtimeClass,
99-
m.fromProduct(_)
100-
)
81+
inline def derived[A <: Product](using
82+
m: Mirror.ProductOf[A],
83+
ct: ClassTag[A]
84+
)(using DescriptorModule, ReadWriteModule, TransitionModule) = new Struct[A]:
85+
val descriptor: StructDescriptor = StructDescriptor(
86+
memberDescriptors[A].view
87+
.zip(memberNames[A])
88+
.map(StructMemberDescriptor.apply)
89+
.toList,
90+
ct.runtimeClass,
91+
m.fromProduct(_)
92+
)
10193

102-
private val offsetsArray = descriptor.offsets
94+
private val offsetsArray = descriptor.offsets
10395

104-
summon[ReadWriteModule].registerWriter[A]((m, b, a) =>
105-
writeGen(offsetsArray.map(_ + b), a, m)
106-
)(using this)
96+
summon[ReadWriteModule].registerWriter[A]((m, b, a) =>
97+
writeGen(offsetsArray.map(_ + b), a, m)
98+
)(using this)
10799

108-
summon[ReadWriteModule].registerReader((m, b) =>
109-
readGen(offsetsArray.map(_ + b), m)
110-
)(using this)
100+
summon[ReadWriteModule].registerReader((m, b) =>
101+
readGen(offsetsArray.map(_ + b), m)
102+
)(using this)
111103

112-
summon[TransitionModule].registerMethodArgumentTransition[A](
113-
this.descriptor,
114-
Allocator ?=> in(_)
115-
)
116-
summon[TransitionModule]
117-
.registerMethodReturnTransition[A](this.descriptor, out)
118-
final def in(a: A)(using alloc: Allocator): Object =
119-
val mem = alloc.allocate(this.descriptor, 1)
120-
summon[ReadWriteModule].write(mem, Bytes(0), a)(using this)
121-
summon[TransitionModule].methodArgument(mem).asInstanceOf[Object]
104+
summon[TransitionModule].registerMethodArgumentTransition[A](
105+
this.descriptor,
106+
Allocator ?=> in(_)
107+
)
108+
summon[TransitionModule]
109+
.registerMethodReturnTransition[A](this.descriptor, out)
110+
final def in(a: A)(using alloc: Allocator): Object =
111+
val mem = alloc.allocate(this.descriptor, 1)
112+
summon[ReadWriteModule].write(mem, Bytes(0), a)(using this)
113+
summon[TransitionModule].methodArgument(mem).asInstanceOf[Object]
122114

123-
final def out(a: Object): A =
124-
val mem = summon[TransitionModule].memReturn(a)
125-
summon[ReadWriteModule].read[A](mem, Bytes(0))(using this)
115+
final def out(a: Object): A =
116+
val mem = summon[TransitionModule].memReturn(a)
117+
summon[ReadWriteModule].read[A](mem, Bytes(0))(using this)

core/test/src/fr/hammons/slinc/BindingSpec.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import scala.concurrent.duration.*
55
import scala.annotation.nowarn
66

77
//todo: get rid of this once https://github.com/lampepfl/dotty/issues/16876 is fixed
8-
@nowarn("msg=unused explicit parameter")
98
trait BindingSpec(val slinc: Slinc) extends ScalaCheckSuite:
109
import slinc.{given, *}
1110
override def munitTimeout: Duration = 5.minutes

core/test/src/fr/hammons/slinc/StdlibSpec.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import fr.hammons.slinc.types.OS
1010
import scala.annotation.nowarn
1111

1212
//todo: remove when https://github.com/lampepfl/dotty/issues/16876 is fixed
13-
@nowarn("msg=unused explicit parameter")
14-
@nowarn("msg=unused implicit parameter")
1513
trait StdlibSpec(val slinc: Slinc) extends ScalaCheckSuite:
1614
import slinc.{given, *}
1715

0 commit comments

Comments
 (0)