@@ -14,12 +14,14 @@ import fr.hammons.slinc.modules.TransitionModule
1414import fr .hammons .slinc .modules .{ArgumentTransition , ReturnTransition }
1515import scala .NonEmptyTuple
1616import scala .language .implicitConversions
17- import dotty .tools .dotc .transform .patmat .Typ
1817
1918/** Describes types used by C interop
2019 */
2120sealed trait TypeDescriptor :
21+ self =>
2222 type Inner
23+ given DescriptorOf [Inner ] with
24+ val descriptor = self
2325 def size (using dm : DescriptorModule ): Bytes = dm.sizeOf(this )
2426 def alignment (using dm : DescriptorModule ): Bytes = dm.alignmentOf(this )
2527 def toCarrierType (using dm : DescriptorModule ): Class [? ] =
@@ -220,13 +222,19 @@ case class CUnionDescriptor(possibleTypes: Set[TypeDescriptor])
220222case class SetSizeArrayDescriptor (
221223 val contained : TypeDescriptor ,
222224 val number : Int
223- ) extends TypeDescriptor :
225+ )(using ClassTag [contained.Inner ])
226+ extends TypeDescriptor :
224227
225228 override val reader : (ReadWriteModule , DescriptorModule ) ?=> Reader [Inner ] =
226- ???
229+ (mem, offset) =>
230+ new SetSizeArray (
231+ summon[ReadWriteModule ].readArray[contained.Inner ](mem, offset, number)
232+ )
227233
228234 override val writer : (ReadWriteModule , DescriptorModule ) ?=> Writer [Inner ] =
229- ???
235+ (mem, offset, value) =>
236+ summon[ReadWriteModule ]
237+ .writeArray[contained.Inner ](mem, offset, value.toArray)
230238
231239 override val argumentTransition
232240 : (TransitionModule , ReadWriteModule , Allocator ) ?=> ArgumentTransition [
@@ -236,4 +244,4 @@ case class SetSizeArrayDescriptor(
236244 override val returnTransition
237245 : (TransitionModule , ReadWriteModule ) ?=> ReturnTransition [Inner ] = ???
238246
239- type Inner = SetSizeArray [? , ? ]
247+ type Inner = SetSizeArray [contained. Inner , ? ]
0 commit comments