Skip to content

Commit 87114b1

Browse files
committed
Booth sides working llvm test work, js some not
1 parent bcf7915 commit 87114b1

1 file changed

Lines changed: 5 additions & 7 deletions

File tree

effekt/shared/src/main/scala/effekt/core/ArityRaising.scala

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,10 @@ object ArityRaising extends Phase[CoreTransformed, CoreTransformed] {
3131
def transform(toplevel: Toplevel)(using C: Context, DC: DeclarationContext): Toplevel = toplevel match {
3232

3333
case Toplevel.Def(id, BlockLit(tparams, cparams, vparams, bparams, body)) => {
34-
// Recursively flatten a parameter into (params, bindings to reconstruct records)
3534
def flattenParam(param: ValueParam): (List[ValueParam], List[(Id, ValueType, Expr)]) = param match {
3635
case ValueParam(paramId, tpe @ ValueType.Data(name, targs)) =>
3736
DC.findData(name) match {
3837
case Some(Data(_, List(), List(Constructor(ctor, List(), fields)))) =>
39-
// Recursively flatten each field
4038
val flattened = fields.map { case Field(fieldName, fieldType) =>
4139
val freshId = Id(fieldName.name)
4240
flattenParam(ValueParam(freshId, fieldType))
@@ -47,10 +45,12 @@ object ArityRaising extends Phase[CoreTransformed, CoreTransformed] {
4745
val allBindings = nestedBindings.flatten
4846

4947
// Create binding to reconstruct this record
50-
val vars = flatParams.map(p => ValueVar(p.id, p.tpe))
51-
val binding = (paramId, tpe, Make(tpe, ctor, List(), vars))
48+
val fieldVars = fields.map { case Field(fieldName, fieldType) =>
49+
ValueVar(Id(fieldName.name), fieldType)
50+
}
51+
val binding = (paramId, tpe, Make(tpe, ctor, List(), fieldVars))
5252

53-
(flatParams, binding :: allBindings)
53+
(flatParams, allBindings :+ binding)
5454

5555
case _ => (List(param), List())
5656
}
@@ -87,7 +87,6 @@ object ArityRaising extends Phase[CoreTransformed, CoreTransformed] {
8787
def transform(stmt: Stmt)(using C: Context, DC: DeclarationContext): Stmt = stmt match {
8888

8989
case Stmt.App(callee @ BlockVar(id, BlockType.Function(List(), List(), vparamsTypes, List(), returnTpe), annotatedCapt), targs, vargs, bargs) =>
90-
// Recursively flatten an argument
9190
def flattenArg(arg: Expr, argType: ValueType): (List[Expr], List[ValueType], List[(Expr, Id, List[ValueParam])]) = argType match {
9291
case ValueType.Data(name, targs) =>
9392
DC.findData(name) match {
@@ -97,7 +96,6 @@ object ArityRaising extends Phase[CoreTransformed, CoreTransformed] {
9796
val freshVar = ValueVar(freshId, fieldType)
9897
val freshParam = ValueParam(freshId, fieldType)
9998

100-
// Recursively flatten if this field is also a record
10199
val (nestedVars, nestedTypes, nestedMatches) = flattenArg(freshVar, fieldType)
102100
(freshVar, freshParam, fieldType, nestedVars, nestedTypes, nestedMatches)
103101
}

0 commit comments

Comments
 (0)